0%

SpringBoot2.x(十五)多环境配置

SpringBoot对多环境配置的支持

对于多环境配置,你也许有过相关的了解,如 maven profile,目的就在于方便应用程序在运行环境对不同配置文件的切换。

有时我们在本机上开发,连接的是本机的测试数据库(dev);而部署到测试(test)或生产环境(pro),连接的可能又是另外一个数据库。这时我们需要定义多个配置文件(如 application.propertiesapplication-test.propertiesapplication-pro.properties)并在其中配置相应环境下同一属性对应的不同值。

我们可以拿一个简单的 web-starter工程为例:

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
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<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>
</plugins>
</build>

resources目录下创建对应三种运行环境(开发、测试、生产)的配置文件:

application.properties

1
2
#local
url=localhost

application-test.properties

1
2
#test
url=www.zhenganwen.top

application-dev.properties

1
2
#pro
url=www.baidu.com

让我们来看一下使用 @Value("${url}")读取的是哪个配置文件值:

1
2
3
4
5
6
@Value("${url}")
private String url;
@RequestMapping("testProfile")
public String testProfile() {
return url;
}

这很简单,根据 SpringBoot 的默认加载classpathapplication.properties作为应用的全局属性配置,访问 localhost:8080/testProfile响应的自然是 localhost

那么如果在 application.properties中添加如下配置呢:

1
spring.profiles.active=test

重启应用后你将会看到响应 www.zhenganwen.top。没错,将会指定应用程序读取属性值时会优先到 application.propertiesspring.profiles.active=xxx指定的配置文件(也就是 application-{xxx}.properties)中读取属性对应的值,这就是 SpringBoot 对多环境配置的支持。

基于以上理论,你已经可以预料到当设置 application.properties中的 spring.profiles.active=pro之后,/testProfile响应的将会是 www.baidu.com

鼓励一下~