Nacos配置中心之引用不到配置文件问题
作者:mmseoamin日期:2023-12-14

文章目录

        • 一、Springboot中application.yml、application.properties和bootStrap.yml的加载顺序
        • 二、问题原因
        • 三、nacos配置中心读取不到配置
          • 1、依赖版本
          • 2、application.yml
          • 3、在application-dev.yml配置文件中配置config配置,引用不到Nacos配置中心的配置
          • 4、启动成功后、无日志打印
          • 解决方案:
            • 引入bootstrap的依赖
            • application-dev.yml
            • bootstrap.properties
            • 启动成功会有一个日志打印
            • 启动成功会有一个日志打印
              一、Springboot中application.yml、application.properties和bootStrap.yml的加载顺序

              1、SpringApplication位于项目根目录,所以所有得代码要和SpringApplication所在目录平级或下一级

              2、以jar包发布springboot项目时,默认会先使用jar包跟目录下的application.properties来作为项目配置文件。

              如果在不同的目录中存在多个配置文件,它的读取顺序是:

              	config/application.properties(项目根目录中config目录下)
              	config/application.yml
              	application.properties(项目根目录下)
              	application.yml
              	resources/config/application.properties(项目resources目录中config目录下)
              	resources/config/application.yml
              	resources/application.properties(项目的resources目录下)
              	resources/application.yml
              注:
              1、如果同一个目录下,有application.yml也有application.properties,默认先读取application.properties。
              2、如果同一个配置属性,在多个配置文件都配置了,默认使用第1个读取到的,后面读取的不覆盖前面读取到的。
              3、创建SpringBoot项目时,一般的配置文件放置在“项目的resources目录下”
              4、先后加载顺序:若application 和bootstrap 在同一目录下:bootstrap先加载 application后加载
              

              3、 若application.yml 和bootStrap.yml 在同⼀⽬录下,则bootStrap.yml 的加载顺序要⾼于application.yml,即bootStrap.yml 会优先被加载。

              原理:

              •bootstrap.yml 用来程序引导时执行,应用于更加早期配置信息读取,如可以使用来配置application.yml中使用到参数等。

              •application.yml 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等、可以⽤来定义应⽤级别的,如果搭配 spring-cloud-config 使⽤ application.yml ⾥⾯定义的⽂件可以实现动态替换。

              例:

              Nacos配置中心之引用不到配置文件问题,在这里插入图片描述,第1张

              Nacos配置中心之引用不到配置文件问题,在这里插入图片描述,第2张

              二、问题原因

              使用springCloud的时候,配置信息一般是要从configServer加载的,为了取到配置信息,需要更早的取到配置,引导配置,因此把 config server 信息放在 bootstrap.yml,用来加载真正需要的配置信息。

              三、nacos配置中心读取不到配置
              1、依赖版本
              
              
                   org.springframework.cloud
                   spring-cloud-dependencies
                   2021.0.1
                   pom
                   import
              
              
              
                   com.alibaba.cloud
                   spring-cloud-starter-alibaba-nacos-config
                   2.2.5.RELEASE
              
              
                  com.alibaba.cloud
                  spring-cloud-starter-alibaba-nacos-discovery
                  2.2.5.RELEASE
              
              
              2、application.yml
              spring:
                profiles:
                  active: @profileActive@
              
              3、在application-dev.yml配置文件中配置config配置,引用不到Nacos配置中心的配置

              代码如下:

              server:
                port: 8082
                tomcat:
                  accesslog:
                    encoding: UTF-8
              spring:
                mvc:
                  pathmatch:
                    matching-strategy: ant_path_matcher
                application:
                  name: pb-gateway
                cloud:
                  nacos:
                    discovery:
                      enabled: true
                      server-addr: 192.168.85.128:8848
                      namespace: c30d277b-745f-4f4a-adda-22a0d1a8efee
                      group: dev
                    config:
                      server-addr: 192.168.85.128:8848
                      file-extension: yaml
                      namespace: c30d277b-745f-4f4a-adda-22a0d1a8efee
                      group: dev
                      refresh-enabled: true
              
              4、启动成功后、无日志打印

              Nacos配置中心之引用不到配置文件问题,[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hPmT3iKm-1681352917379)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20230413094725235.png)],第3张

              解决方案:

              将application-dev.yml中config配置移动到bootstrap.properties文件中

              如下:

              引入bootstrap的依赖
              
                  org.springframework.cloud
                  spring-cloud-starter-bootstrap
                  3.1.3
              
              
              application-dev.yml
              server:
                port: 8082
                tomcat:
                  accesslog:
                    encoding: UTF-8
              spring:
                mvc:
                  pathmatch:
                    matching-strategy: ant_path_matcher
                cloud:
                  nacos:
                    discovery:
                      enabled: true
                      server-addr: 192.168.85.128:8848
                      namespace: c30d277b-745f-4f4a-adda-22a0d1a8efee
                      group: dev
              
              bootstrap.properties
              spring.application.name=pb-gateway
              spring.cloud.nacos.config.server-addr=192.168.85.128:8848
              spring.cloud.nacos.config.file-extension=yaml
              spring.cloud.nacos.config.namespace=c30d277b-745f-4f4a-adda-22a0d1a8efee
              spring.cloud.nacos.config.group=dev
              spring.cloud.nacos.config.refresh-enabled=true
              
              启动成功会有一个日志打印

              space=c30d277b-745f-4f4a-adda-22a0d1a8efee

              spring.cloud.nacos.config.group=dev

              spring.cloud.nacos.config.refresh-enabled=true

              ``

              启动成功会有一个日志打印

              Nacos配置中心之引用不到配置文件问题,在这里插入图片描述,第4张