一、前言
对于springboot工程,在不同环境(例如
dev
,test
,prod
等)可能有不同的配置信息(配置在application.yml
或application.properties
中),例如swagger.enable这个变量,在dev和test环境值为true,在prod环境的值为false。在springboot中,有两种方式可以实现多环境配置文件:
- 一种是直接在一个配置文件中配置多个环境的配置信息(即多文档块,通过
---
分割),这种仅支持application.yml文件
;- 一种是一个
主配置文件
(application.yml或application.properties)和多个环境配置文件
(application-dev.yml,application-test.yml,application-prod.yml等)。
二、单个配置实现多环境配置
配置文件为application.yml
,不同环境相同的配置信息可以配置在顶层文档块,不同环境不同配置信息配置在不同环境文档块中。通过spring.profiles.active
变量可以在不同环境指定使用哪个配置文档块。
# 不同环境相同的配置信息可以配置在这个块
server:
port: 8088
servlet:
context-path: /demo
# 激活指定使用哪个环境配置文件
spring:
profiles:
active: prod
---
spring:
profiles: dev
swagger:
enable: true
---
spring:
profiles: test
swagger:
enable: true
---
spring:
profiles: prod
swagger:
enable: false
三、多个配置文件形式
创建一个主配置文件,和不同环境的子配置文件,文件布局如下:
主配置文件:application.yml
# 不同环境相同的配置信息可以配置在这个文件
server:
port: 8088
servlet:
context-path: /demo
# 激活指定使用哪个环境配置文件
spring:
profiles:
active: prod
dev环境:application-dev.yml
swagger:
enable: true
test环境:application-test.yml
swagger:
enable: true
prod环境:application-prod.yml
swagger:
enable: false
四、激活配置文件方式
- 通过在主配置文件中(application.yml或application.properties)指定变量spring.profiles.active的值,例如spring.profiles.active=dev
- 命令行指定:java -jar springboot-demo.jar --spring.profiles.active=dev
- 虚拟机参数指定:-Dspring.profiles.active=dev
五、配置文件加载顺序
springBoot启动会扫描读取以下位置中的配置文件,优先级由高到低:
- -file:./config/,即当前项目下的config文件夹(src同级目录)
- -file:./,即当前项目下
- -classpath:./config/,即当前项目中resources资源文件夹下的config文件夹
- -classpath:./,即当前项目中resources资源文件夹下