Spring Boot 外部化配置简介
2020-08-05 本文已影响0人
尚水杨
外部化配置简介(Externalized Configuration)
Spring Boot提供properties文件、YAML文件、环境变量(environment variables)和命令行参数的方式进行外部化配置,可以在不同的环境,使用不同的配置信息。
应用可以通过@Value注入到bean,也可以通过@ConfigurationProperties进行对象的绑定配置。
配置的优化级
- Devtools的全局配置目录$HOME/.config/spring-boot
- 在测试目录的@TestPropertySource注解
- 在测试目录中的properties属性
- 命令行参数(--key=value参数形式)
- SPRING_APPLICATION_JSON(环境变量或者系统属性传入)
- ServletConfig初始化参数
- ServletContext初始化参数
- JNDI 属性(java:com/env)
- Java系统属性(System.getProperties() ,-Dkey=value形式)
- 操作系统环境变量
- RandomValuePropertySource(random.*的属性)
- jar包外的指定profile的属性(application-{profile}.properties and YAML)
- jar包内的指定profile的属性(application-{profile}.properties and YAML)
- jar包外的应用属性(application.properties and YAML)
- jar包内的应用属性(application.properties and YAML)
- 在@Configuration类中配置的@PropertySource属性(上下文件refresh后有效,有些组件需要refresh前使用的这个不会生效)
- 默认属性(pringApplication.setDefaultProperties指定)
配置文件路径
Spring Boot提供的默认通配符路径(wildcard location)在jar包路径的config/*/目录下。
可以通过指定spring.config.additional-location和spring.config.location来修改
SPRING_APPLICATION_JSON的配置
环境变更
#linux下
SPRING_APPLICATION_JSON='{"name":"test"}' java -jar myapp.jar
#window下
环境变更配置
SPRING_APPLICATION_JSON={"name":"test"}
java -jar myapp.jar
系统属性
#linux
java -Dspring.application.json='{"name":"test"}' -jar myapp.jar
#windows
java -Dspring.application.json="{\"name\":\"test\"}" -jar myapp.jar
命令行参数
#linux
java -jar myapp.jar --spring.application.json='{"name":"test"}'
#window
java -jar myapp.jar --spring.application.json="{\"name\":\"test\"}"