SpringBoot应用默认扫描了 classpath:,classpath:/config,file:,file:config/
目录下的 application*
配置文件,优先级从低到高。
spring.config.name="custom"
spring.config.location="/Users/tengchong/Desktop/"
,添加后扫描目录将变为: classpath: classpath:/config file: file:config/ file:/Users/tengchong/Desktop/
优先级从低到高
打jar包部署可以在启动的时候通过 spring.config.location
去指定配置文件所在的目录, spring.profiles.active
指定环境
java -jar easy-frame.jar --Dspring.config.location=/Users/tengchong/Desktop/ --spring.profiles.active=prod 复制代码
启动时可以看到日志中输出的关于扫描配置文件的信息
13:09:51 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Activated activeProfiles prod 13:09:51 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Profiles already activated, '[dev]' will not be applied 13:09:51 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Loaded config file 'jar:file:/Users/tengchong/Desktop/easy-frame.jar!/BOOT-INF/classes!/application.yml' (classpath:/application.yml) 13:09:51 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Loaded config file 'file:./application-prod.yml' (file:./application-prod.yml) for profile prod 13:09:51 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Loaded config file 'jar:file:/Users/tengchong/Desktop/easy-frame.jar!/BOOT-INF/classes!/application-prod.yml' (classpath:/application-prod.yml) for profile prod 复制代码
日志中加载了3个配置文件分别为(加载顺序与优先级无关):
classes!/application.yml
jar中的通用配置 file:./application-prod.yml
/Users/tengchong/Desktop/
目录下的prod环境对应配置 classes!/application-prod.yml
jar中的prod环境对应配置
其中 classes!/application-prod.yml
的配置重复部分会被 file:./application-prod.yml
覆盖
由于 application.yml
中配置了 spring.profiles.active=dev
所以此处提示 Profiles already activated, '[dev]' will not be applied
这里可以忽略,因为参数中的 spring.profiles.active
优先级高于此处。
打war包部署可以通过设置 JAVA_OPTS
来自定义参数,这里以 apache-tomcat-8.5.40
为例说明
bin/catalina.sh
vi ./bin/catalina.sh 复制代码
JAVA_OPTS="$JAVA_OPTS -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dspring.config.location=/Users/tengchong/Desktop/ -Dspring.profiles.active=prod" 复制代码
./bin/startup.sh 复制代码
日志中输出以下信息
13:23:53 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Activated activeProfiles prod 13:23:53 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Loaded config file 'file:/Users/tengchong/Desktop/application-prod.yml' (file:/Users/tengchong/Desktop/application-prod.yml) for profile prod 复制代码
发现启动的时候应用没有扫描 classpath:,classpath:/config,file:,file:config/
目录仅扫描了 spring.config.location
指定的目录,具体原因未知暂时将应用中 application.yml
也放到 /Users/tengchong/Desktop/
后可以成功启动
13:26:51 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Activated activeProfiles prod 13:26:51 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Profiles already activated, '[dev]' will not be applied 13:26:51 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Loaded config file 'file:/Users/tengchong/Desktop/application.yml' (file:/Users/tengchong/Desktop/application.yml) 13:26:51 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Loaded config file 'file:/Users/tengchong/Desktop/application-prod.yml' (file:/Users/tengchong/Desktop/application-prod.yml) for profile prod 复制代码
由于 application.yml
中配置了 spring.profiles.active=dev
所以此处提示 Profiles already activated, '[dev]' will not be applied
这里可以忽略或者删除 /Users/tengchong/Desktop/application.yml
中的 spring.profiles.active=dev
,因为 JAVA_OPTS
中的 spring.profiles.active
优先级高于此处。
如知晓tomcat下没有扫描 classpath:,classpath:/config,file:,file:config/
目录的原因请告知,感谢
如有错误请指出,感谢