Spring Boot 不同环境加载不同配置文件
加载位置与顺序SpringBoot启动会扫描以下位置的application.properties/yml文件作为spring boot的默认配置文件:file:./config/file:./classpath:/config/classpath:以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置的内容,并形成互补配置;当然,我们也可以通过spring.
文件加载位置与顺序
SpringBoot启动会扫描以下位置的application.properties/yml文件作为spring boot的默认配置文件:
#file: 指当前项目根目录
file:./config/
file:./
#classpath: 指当前项目的resources目录
classpath:/config/
classpath:
以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置的内容,并形成互补配置;
spring.config.location来改变默认配置的位置。
指定配置文件的方式
属性文件的命名:application-{profile}.properties或者application-{profile}.yml,bootstrap-{profile}.properties或者bootstrap-{profile}.yml。
boot的加载配置的顺序:
application.yml总是会被加载,不管是否配置spring.profile.active.
最先加载application.yml(properties),然后再按照spring.profile.active加载相应的application-{profile}.yml(properties)。如果application和application-{profile}中键有重复会被application-{profile}替换为最新的。
方法1:配置文件方式
在默认配置文件中application.properties指定环境比如
spring.profile.active=mydev
程序启动之后就会按照配置的环境加载指定的属性文件。比如当前就加载application-mydev.yml。
当前模块中application》Jar包中application》当前模块中application-{profile}》Jar包中application-{profile}
如果是cloud的项目:
当前模块中bootstrap》Jar包中bootstrap》当前模块中bootstrap-{profile}》Jar包中bootstrap-{profile}>>当前模块中application》Jar包中application》当前模块中application-{profile}》Jar包中application-{profile}
注:如果键重复则会被更新成最新的,按照先后顺序只要找到匹配的文件就不下查找了。
具体可以看Spring Boot中的这个类ConfigFileApplicationListener
方法2:Java系统属性方式
在启动jar时指定加载配置(Java系统属性方式)
java -Dspring.profiles.active=mydev123 -jar SpringBootEnv-1.0.jar
-Dspring.profiles.active=mydev123一定要放-jar之前能触发java属性方式
或者使用Java代码设置
System.setProperty("spring.profiles.active","mydev");
方法3:命令行方式
在启动jar时指定加载配置(命令行方式)
java -jar SpringBootEnv-1.0.jar --spring.profiles.active=dev56789
方法4:系统环境变量方式
在启动jar时指定加载配置(系统环境变量方式)
首先增加一个名称为SPRING_PROFILES_ACTIVE的系统环境变量,然后执行
#当前系统是windows
set SPRING_PROFILES_ACTIVE=dev987
java -jar SpringBootEnv-1.0.jar
四种方式的优先级
命令行方式 > Java系统属性方式 > 系统环境变量方式 > 配置文件方式
如果需要激活多个profile可以使用逗号隔开,如:- -spring.profiles.active=dev,test
更多推荐
所有评论(0)