在实际开发项目中,我们开发环境、测试环境、补丁环境都是有不同的配置的。各个环境可能用不同的数据库,为了便于开发,spring提供了多环境配置文件切换功能。比如:application-dev.yml表示测试环境配置、application-test.yml表示测试环境配置、application-prod.yml表示补丁环境配置、application.yml则是默认环境。如此,我们让那个配置生效,只需要指定对应的配置文件即可。
如下测试中,我写了四个配置文件:
里面的内容也非常的简单,都只是配置了一个启动端口而已,由于篇幅问题,我将yum配置的端口写到一行,这当然是错误的哈
application.yml —> server: port: 8080
application-dev.yml —> server: port: 8081
application-test.yml —> server: port: 8082
application-prod.yml —> server: port: 8083
① 使用默认配置文件
现在我什么都不做,直接启动,按照我上面的论述,那么启动的端口就该是8080
②使用spring配置激活某个配置文件
现在我想将启动生效配置文件改为dev环境,即让application-dev.yml配置文件生效,我只需要在默认的application.yml中加上一个配置:spring.profiles.active=dev即可,如下
1 2 3 4 5 |
server: port: 8082 spring: profiles: active: dev |
那么启动就因该是8081:
同理,如果你想切换到test或者prod来启动项目,将上面dev修改为test或者prod即可生效
③启动时在IDEA中指定启动配置文件
④ 配置虚拟机参数来指定配置文件
⑤IDEA高点的版本还有一个地方可以配置
⑥jar包启动,指定参数
java -jar springboot-helloworld-1.0-SNAPSHOT.jar --spring.profiles.active=prod
也可以在一个配置文件中,写多个模块来对应不同的环境:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
server: port: 8080 spring: profiles: active: test --- spring: profiles: dev server: port: 8081 --- spring: profiles: test server: port: 8082 --- spring: profiles: prod server: port: 8083 |
用三个中横线隔开,表示不用的模块,在第一个默认模块位置指定要激活的模块即可,如果不指定就是默认模块。
springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文
件
–file:./config/
–file:./
–classpath:/config/
–classpath:/
优先级由高到底,高优先级的配置会覆盖低优先级的配置
SpringBoot会从这四个位置全部加载主配置文件;互补配置,高优先级覆盖低优先级,高优先级没有的低优先级生效。
我们还可以通过spring.config.location来改变默认的配置文件位置
项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默
认加载的这些配置文件共同起作用形成互补配置;
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties
SpringBoot也可以从以下位置加载配置; 优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会
形成互补配置
1.命令行参数
所有的配置都可以在命令行上进行指定
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc
多个配置用空格分开; --配置项=值
2.来自java:comp/env的JNDI属性
3.Java系统属性(System.getProperties())
4.操作系统环境变量
5.RandomValuePropertySource配置的random.*属性值
由jar包外向jar包内进行寻找,且优先加载带profile
6.jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
7.jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
再来加载不带profile
8.jar包外部的application.properties或application.yml(不带spring.profile)配置文件
9.jar包内部的application.properties或application.yml(不带spring.profile)配置文件
10.@Configuration注解类上的@PropertySource
11.通过SpringApplication.setDefaultProperties指定的默认属性
所有支持的配置加载来源;官方文档
from:https://blog.csdn.net/u013441805/article/details/103467814