本文将介绍SpringBoot配置文件优先级与自定义配置文件的相关用法总结。
- springboot 配置文件的优先级
属性文件是最常见的管理配置属性的方式。Spring Boot 提供的 SpringApplication 类会搜索并加载 application.properties 文件来获取配置属性值。SpringApplication 类会在下面位置搜索该文件,加载顺序如下:
- properties vs yml
优先级 :properties > yml - application.properties vs /config/application.properties
优先级 : /config/application.properties > application.properties - /config/application.yml vs application.properties
优先级:/config/application.yml > application.properties
config的优先级高与文件类型的优先级 - properties vs properties-default.properties
优先级:application-default.properties > application.properties - properties vs properties-{profile(非default)}.properties
优先级:application.properties > properties-{profile(非default)}.properties - application-default.yml vs application.properties
优先级:application-default.yml > application.properties
default的优先级高于文件类型的优先级 - application-default.yml vs /config/application.properties
优先级:application-default.yml > /config/application.properties
ddefault的优先级是高于config目录 - /config/application-default.yml vs classpath:/application-default.yml
优先级:config/application-default.yml > application-default.yml
总结:
config/application-default.properties > config/application-default.yml > application-default.properties > application-default.yml > config/application.properties > config/application.yml > application.properties > application.yml
- springboot 配置文件先关配置与读取介绍
- application.properties 相关配置
参考官方配置 - 自定义属性与加载
自定义属性文件config.properties:com.chf.config.name=tom com.chf.config.age=1
- 加载方式
a、通过@Value方式加载@Component @Data public class ConfigProperties { @Value("${com.chf.config.name}") private String name; @Value("${com.chf.config.age}") private Integer age; }
b、通过@ConfigurationProperties加载@Configuration @PropertySource("classpath:config/config.properties") @ConfigurationProperties(prefix = "com.chf.config") @Data public class ConfigBean { private String name; private Integer age; }
- 参数引用
com.chf.config.name=tom com.chf.config.age=19 com.chf.config.desc:name is ${com.chf.config.name} age is ${com.chf.config.age}
- 随机数
Spring Boot 通过 RandomValuePropertySource 提供了很多关于随机数的工具类。概括可以生成随机字符串、随机 int 、随机 long、某范围的随机数。com.chf.config.id=${random.uuid} com.chf.config.name=${random.long} com.chf.config.age=${random.int[18,108]} com.chf.config.desc:${random.value}
- 命令行参数设置
可以通过jar命令行设置 java -jar xxx.jar --server.port=8888 等价于在配置文件中配置,可以通过SpringApplication.setAddCommandLineProperties(false); 设置屏蔽命令行参数设置。 - 多环境配置
很多场景的配置,比如数据库配置、Redis 配置、注册中心和日志配置等。在不同的环境,我们需要不同的配置去运行项目:application-dev.properties:开发环境 application-test.properties:测试环境
application.properties 文件中,设置 spring.profiles.active 属性,比如 配置了 test,则加载的是 application-test.properties :
spring.profiles.active=test
jar 运行的方式,通过设置 -Dspring.profiles.active=test 去指定相应的配置:
java -jar -Dspring.profiles.active=test