一、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 ⾥⾯定义的⽂件可以实现动态替换。
例:
二、问题原因
使用springCloud的时候,配置信息一般是要从configServer加载的,为了取到配置信息,需要更早的取到配置,引导配置,因此把 config server 信息放在 bootstrap.yml,用来加载真正需要的配置信息。
三、nacos配置中心读取不到配置
1、依赖版本
<!-- spring cloud版本-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- nacos配置中心 -->
<dependency>
<groupId>***.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>***.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
2、application.yml
spring:
profiles:
active: @profileActive@
3、在application-dev.yml配置文件中配置config配置,引用不到Nacos配置中心的配置
代码如下:
server:
port: 8082
tomcat:
a***esslog:
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、启动成功后、无日志打印
解决方案:
将application-dev.yml中config配置移动到bootstrap.properties文件中
如下:
引入bootstrap的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.3</version>
</dependency>
application-dev.yml
server:
port: 8082
tomcat:
a***esslog:
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
``