SpringBoot多环境配置文件方案
yaml
在/src/main/resources/
下创建配置文件application.yml
,写入以下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| spring: profiles: active: dev
---
spring: profiles: dev server: port: 80
---
spring: profiles: pro server: port: 81
---
spring: profiles: test server: port: 82
|
如果使用spring.profiles
的话会提示已过时,可以使用spring.config.activate.on-profile
来代替
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| spring: profiles: active: dev
---
spring: config: activate: on-profile: dev server: port: 80
---
spring: config: activate: on-profile: pro server: port: 81
---
spring: config: activate: on-profile: test server: port: 82
|
profile
在/src/main/resources/
下创建配置文件application.properties
,写入以下内容
1 2
| spring.profiles.active=dev
|
如果在application.properties
配置的是dev,那么就会在/src/main/resources/
下找application-dev.properties
这个配置文件
创建application-dev.properties
配置文件,写入以下内容
如果有其他环境,创建对应的application-xxx.properties
配置文件,然后再在application.properties
主配置文件中配置就行了
环境切换
如果每次更改环境就将配置文件更改一次然后重新编译项目,这是非常麻烦的
使用maven打包为jar包后,只需要在运行命令中添加参数就能够更改项目的运行环境
1
| $ java -jar xxx.jar --spring.profiles.active=test
|
并且不是只能使用一个参数,可以使用很多个参数,这样就可以修改很多的值
1
| $ java -jar xxx.jar --spring.profiles.active=test --server.port=88
|
maven环境
当然,maven也有多环境配置,并且maven的配置优先级还高一些,因为jar包是由maven来打包的
在pom.xml
中的build
节点和profiles
节点配置以下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.7</version> <relativePath/> </parent> <groupId>com.example</groupId> <artifactId>spring-boot-test-03</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-boot-test-03</name> <description>spring-boot-test-03</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.2.0</version> <configuration> <encoding>UTF-8</encoding> <useDefaultDelimiters>true</useDefaultDelimiters> </configuration> </plugin> </plugins> </build>
<profiles> <profile> <id>dev</id> <properties> <profile.active>test</profile.active> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile>
<profile> <id>pro</id> <properties> <profile.active>pro</profile.active> </properties> </profile>
<profile> <id>test</id> <properties> <profile.active>test</profile.active> </properties> </profile> </profiles> </project>
|
pom.xml
配置好后,还需要在yaml中配置我们定义好的变量,使用${}
即可引用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| spring: profiles: active: ${profile.active}
---
spring: config: activate: on-profile: dev server: port: 80
---
spring: config: activate: on-profile: pro server: port: 81
---
spring: config: activate: on-profile: test server: port: 82
|
配置文件优先级
具体优先级可到官网进行查看
以下列出我目前已知的优先级(自上而下,优先级由高到低)
运行打包好的jar的命令所携带的参数
在打包好的jar包的同级目录创建一个config
目录在目录中添加的配置文件
在打包好的jar包的同级目录创建的配置文件
在项目源代码/src/main/resources/config
目录下创建的配置文件
在项目源代码/src/main/resources
目录下创建的配置文件
具体的优先级如上,文件优先级如下(从左到右,优先级由高到低)
application.properties
-> application.yml
-> application.yaml
四级配置文件
SpringBoot中分为4级配置文件(自上而下,优先级由高到低)
- file: config/application.yml
- file: application.yml
- classpath: config/application.yml
- classpath: application.yml(Intllij IDEA中创建的配置文件,默认就是这级配置文件,优先级最低)