一切福田,不離方寸,從心而覓,感無不通。

Spring Boot多环境文件配置

一、多配置文件

在实际开发项目中,我们开发环境、测试环境、补丁环境都是有不同的配置的。各个环境可能用不同的数据库,为了便于开发,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即可,如下

那么启动就因该是8081:

同理,如果你想切换到test或者prod来启动项目,将上面dev修改为test或者prod即可生效

③启动时在IDEA中指定启动配置文件

④ 配置虚拟机参数来指定配置文件

⑤IDEA高点的版本还有一个地方可以配置

⑥jar包启动,指定参数

java -jar springboot-helloworld-1.0-SNAPSHOT.jar --spring.profiles.active=prod

三、一个配置文件多个模块

也可以在一个配置文件中,写多个模块来对应不同的环境:

用三个中横线隔开,表示不用的模块,在第一个默认模块位置指定要激活的模块即可,如果不指定就是默认模块。

四、配置文件加载位置

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