SpringBoot配置文件加载顺序
翻找springBoot文档总结而来:
SpringBoot默认支持properties和YAML两种格式的配置文件。
前者格式简单,但是只支持键值对。如果需要表达列表,最好使用YAML格式。
SpringBoot支持自动加载约定名称的配置文件,例如application.yml。如果是自定义名称的配置文件,就要另找方法了。可惜的是,不像前者有@PropertySource这样方便的加载方式,后者的加载必须借助编码逻辑来实现。
读取顺序
如果在不同的目录中存在多个配置文件,它的读取顺序是:
1、application.properties(项目根目录下)
2、application.yml
3、config/application.properties(项目根目录中config目录下)
4、config/application.yml
5、resources/application.properties(项目的resources目录下)
6、resources/application.yml
7、resources/config/application.properties(项目resources目录中config目录下)
8、resources/config/application.yml
9、resources/config/mysql/application.properties(configz子目录下)
注:
1、如果同一个目录下,有application.yml也有application.properties,默认先读取application.properties。
2、如果同一个配置属性,在多个配置文件都配置了,默认使用第1个读取到的,后面读取的不覆盖前面读取到的。
在springBoot3版本中看到,您添加的每个spring.config.location项将引用单个文件或目录。位置按照定义的顺序处理,后面的位置可以覆盖前面位置的值。
3、创建SpringBoot项目时,一般的配置文件放置在“项目的resources目录下”
注意:
如果您不喜欢application作为配置文件名,您可以通过指定spring.config.name环境属性来切换到另一个文件名。例如,myproject.properties 和myproject.yaml。
java -jar myproject.jar --spring.config.name=myproject
您还可以通过使用spring.config.location环境属性来引用显式位置
java -jar myproject.jar
--spring.config.location=optional:classpath:/default.properties,optional:classpath:/override.properties
bootstrap.yml(bootstrap.properties)与application.yml(application.properties)执行顺序
bootstrap.yml(bootstrap.properties)用来程序引导时执行,应用于更加早期配置信息读取,如可以使用来配置application.yml中使用到参数等
application.yml(application.properties) 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。
bootstrap.yml 先于 application.yml 加载
典型的应用场景如下:
当使用 Spring Cloud Config Server 的时候,你应该在 bootstrap.yml 里面指定 spring.application.name和 spring.cloud.config.server.git.uri
和一些加密/解密的信息
技术上,bootstrap.yml 是被一个父级的 Spring ApplicationContext 加载的。这个父级的 Spring ApplicationContext是先加载的,在加载application.yml 的 ApplicationContext之前。
为何需要把 config server 的信息放在 bootstrap.yml 里?
当使用 Spring Cloud 的时候,配置信息一般是从 config server 加载的,为了取得配置信息(比如密码等),你需要一些提早的或引导配置。
因此,把 config server 信息放在 bootstrap.yml,用来加载真正需要的配置信息。
SpringBoot配置文件配置文件顺序
SpringBoot配置文件默认可以放到以下目录中,可以自动读取到:
项目根目录下
项目根目录中config目录下
项目的resources目录下
项目resources目录中config目录下

Yaml(yml)文件格式:
大小写有区别
数据前必须有空格(空格数目无所谓)作为分隔符,否则不识别该数据。
缩进的空格数目不重要,但是相同层级的元素要左对齐。
注释的话快捷键也是ctrl+/,是#+空格。
参数引用的话用${}包裹起来即可。
对象(map):键值对的集合
person:
name: zhangsan# 行内写法
person: {name: zhangsan}
# Spring
spring:
profiles:
# 环境配置
active: dev
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: ${NACOS_ADDRESS:127.0.0.1:8848}
namespace: ${NACOS_NAMESPACE:SAM0}
config:
# 配置中心地址
server-addr: ${NACOS_ADDRESS:127.0.0.1:8848}
namespace: ${NACOS_NAMESPACE:SAM0}
# 配置文件格式
file-extension: yml
shared-configs[1]:
data-id: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}数组
address:
- beijing
- shanghai# 行内写法
address: [beijing,shanghai]纯量:单个的、不可再分的值。一般都是字符串
msg1: 'hello \n world' # 单引忽略转义字符
msg2: "hello \n world" # 双引识别转义字符多profile文件方式
application.properties/yml 默认
application-dev.properties/yml 开发环境
application-test.properties/yml 测试环境
application-pro.properties/yml 生产环境
激活方式:
配置文件
在配置文件中配置:spring.profiles.active=dev
虞拟机参数
在VM options指定:-Dspring.profiles.active=dev
命令行参数
java-jar xxx.jar --spring.profiles.active=dev
IDE中在maven窗口的第一个Profiler中直接勾选中相应环境