简介
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包部署
打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包部署
打war包部署可以通过设置JAVA_OPTS
来自定义参数,这里以apache-tomcat-8.5.40
为例说明
- 修改
bin/catalina.sh
vi ./bin/catalina.sh
- 添加参数,在250行左右
JAVA_OPTS="$JAVA_OPTS -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dspring.config.location=/Users/tengchong/Desktop/ -Dspring.profiles.active=prod"
- 保存后启动tomcat
./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/
后可以成功启动
如知晓tomcat下没有扫描`classpath:,classpath:/config,file:,file:config/`目录的原因请告知,感谢
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/
目录的原因请告知,感谢
如有错误请指出,感谢