在实际开发过程中 生产环境 和 测试环境 有可能是不一样的,因此将生产中的配置和测试中的配置拆分开,是非常必要的;在 springboot 中也提供了配置文件拆分的方式。
这里以生产中项名名称不一致为例,假设:
- 生产中的项目名为:cmzf
- 测试中的项目名为:springboot
- 端口同时为:8080
application.yml
- 主配置文件:
application.yml
# 用来书写生产和测试相同的的配置
spring:
profiles:
active: dev
server:
port: 8080 #生产和测试为同一个端口
- 生产配置文件:
application-pord.yml
server:
servlet:
context-path: /cmfz
- 测试配置文件:
application-dev.yml
server:
servlet:
context-path: /springboot
yml 多文档块方式
server:
port: 8081
spring:
profiles:
active: prod
---
server:
port: 8083
spring:
profiles: dev
---
server:
port: 8084
spring:
profiles: prod #指定属于哪个环境
application.properties
- 主配置文件:
application.properties
# 延迟加载
spring.main.lazy-initialization=true
# 使用测试环境配置
spring.profiles.active=dev
测试配置文件:application-dev.properties
server.servlet.context-path=/springboot
server.port=8989
生产配置文件:application-prod.properties
server.servlet.context-path=/cmfz
server.port=8080
激活指定 profile(3种方法)
1、在配置文件中指定 spring.profiles.active=dev
2、命令行:运行 jar 包时后面写上:--spring.profiles.active=dev
java -jar hello_springboot-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;
可以直接在测试的时候,配置传入命令行参数:
3、虚拟机参数;
-Dspring.profiles.active=dev
配置文件的加载位置
springboot 启动会扫描以下几个位置的 配置文件:
–file:./config/
–file:./
–classpath:/config/
–classpath:/
优先级由高到底,高优先级的配置会覆盖低优先级的配置;
SpringBoot 会从这四个位置全部加载主配置文件;互补配置;
我们还可以通过 spring.config.location
来改变默认的配置文件位置;
项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;
指定配置文件和默认加载的这些配置文件共同起作用形成互补配置;
java -jar hello_springboot-0.0.1-SNAPSHOT.jar --spring.config.location=D:/application.properties