中国空间站机械臂,这样做网站,深圳市宝安区松岗街道邮政编码,拿自己爱人做网站转载自 Spring Boot 配置加载顺序详解
使用 Spring Boot 会涉及到各种各样的配置#xff0c;如开发、测试、线上就至少 3 套配置信息了。Spring Boot 可以轻松的帮助我们使用相同的代码就能使开发、测试、线上环境使用不同的配置。
在 Spring Boot 里面#xff0c;可以使…转载自 Spring Boot 配置加载顺序详解
使用 Spring Boot 会涉及到各种各样的配置如开发、测试、线上就至少 3 套配置信息了。Spring Boot 可以轻松的帮助我们使用相同的代码就能使开发、测试、线上环境使用不同的配置。
在 Spring Boot 里面可以使用以下几种方式来加载配置。本章内容基于 Spring Boot 2.0 进行详解。
1、properties文件
2、YAML文件
3、系统环境变量
4、命令行参数
等等……
配置属性加载的顺序如下
1、开发者工具 Devtools 全局配置参数2、单元测试上的 TestPropertySource 注解指定的参数3、单元测试上的 SpringBootTest 注解指定的参数4、命令行指定的参数如 java -jar springboot.jar --nameJava技术栈5、命令行中的 SPRING_APPLICATION_JSONJSON 指定参数, 如 java -Dspring.application.json{name:Java技术栈} -jar springboot.jar6、ServletConfig 初始化参数7、ServletContext 初始化参数8、JNDI参数如 java:comp/env/spring.application.json9、Java系统参数来源System.getProperties()10、操作系统环境变量参数11、RandomValuePropertySource 随机数仅匹配ramdom.*12、JAR包外面的配置文件参数application-{profile}.propertiesYAML13、JAR包里面的配置文件参数application-{profile}.propertiesYAML14、JAR包外面的配置文件参数application.propertiesYAML15、JAR包里面的配置文件参数application.propertiesYAML16、Configuration配置文件上 PropertySource 注解加载的参数17、默认参数通过 SpringApplication.setDefaultProperties 指定数字小的优先级越高即数字小的会覆盖数字大的参数值我们来实践下验证以上配置参数的加载顺序。
1、在主应用程序中添加 Java 系统参数。
Bean
public CommandLineRunner commandLineRunner() {return (args) - {System.setProperty(name, javastack-system-properties);};
}2、在 application.properties 文件中添加属性。
name javastack-application3、在 application-dev.properties 文件中添加属性。
name javastack-application-dev4、添加测试类
RunWith(SpringRunner.class)
SpringBootTest(value { namejavastack-test, sex1 })
ActiveProfiles(dev)
public class SpringBootBestPracticeApplicationTests {Value(${name})private String name;Testpublic void test() {System.out.println(name is name);}}运行 test 单元测试程序输出
name is javastack-test根据以上参数动态调整发现参数会被正确被覆盖。了解了 Spring Boot 各种配置的加载顺序如果配置被覆盖了我们就知道是什么问题了。