前言
提问:springboot项目,开发环境、测试环境和生产环境配置文件如何分开表示?
答:多profile文件方式
1、多环境配置(profile)
1.1、properties文件配置
application.properties:主配置文件
主配置文件配置决定加载哪个环境的配置文件
spring.profiles.active=dev
根据spring.profiles.active值,选择加载不同环境配置
application-{profile}.properties
开发、测试、生产环境配置文件:
- application-dev.properties:开发环境配置文件
- application-test.properties:测试环境配置文件
- application-prod.properties:生产环境配置文件
1.2、YML文件配置
application.yml:主配置文件
主配置文件配置决定加载哪个环境的配置文件
spring:
profiles:
active:dev
根据spring.profiles.active值,选择加载不同环境配置
application-{profile}.yml
开发、测试、生产环境配置文件:
- application-dev.yml:开发环境配置文件
- application-test.yml:测试环境配置文件
- application-prod.yml:生产环境配置文件
1.3、修改主配置文件切换配置
1.3.1、切换生产配置
#默认配置
server:
port: 8080
#切换配置
spring:
profiles:
active: prod
1.3.2、切换开发配置
#开发环境配置
server:
port: 8080
#切换配置
spring:
profiles:
active: dev
1.3.3、切换测试配置
#测试环境配置
server:
port: 8080
#切换配置
spring:
profiles:
active: test
1.4、命令行激活配置文件
1.4.1、命令行激活配置文件
java -jar springboot-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
1.4.2、虚拟机参数激活
java -Dspring.profiles.active=dev -jar springboot-0.0.1-SNAPSHOT.jar
2、默认配置文件
Spring Boot 启动时会扫描以下 5 个位置的 application.properties 或 apllication.yml 文件,并将它们作为 Spring boot 的默认配置文件。
- file:./config/*/
- file:./config/
- file:./
- classpath:/config/
- classpath:/
2.1、file
指当前项目根目录;
2.2、classpath
指当前项目的类路径,即 resources 目录。
注意事项:
- 位于相同位置的 application.properties 的优先级高于 application.yml
- 所有位置的文件都会被加载,高优先级配置会覆盖低优先级配置,形成互补配置,即:
- 存在相同的配置内容时,高优先级的内容会覆盖低优先级的内容;
- 存在不同的配置内容时,高优先级和低优先级的配置内容取并集。
3、外部配置文件
可通过指定外部配置文件的路径(默认配置文件失效)
3.1、spring.config.location
java -jar xxxx.jar --spring.config.location=外部文件
3.2、spring.config.additional-location
默认配置文件公共生效,其优先级是最高。
java -jar xxxx.jar --spring.config.additional-location=外部文件
案例
4、配置文件优先级
以下是常用的 Spring Boot 配置形式及其加载顺序(优先级由高到低):
- 命令行参数
- 配置文件(YAML 文件、Properties 文件)
- @Configuration 注解类上的 @PropertySource 指定的配置文件
- 通过 SpringApplication.setDefaultProperties 指定的默认属性
配置文件