[Java] Spring Boot 多环境配置
2022-06-26 本文已影响0人
巨馍蘸酱
一个项目通常会存在多个环境,例如,开发环境、测试环境和生产环境等
- 打包手动修改
spring.profiles.active
(配置简单, 仅 yml 文件) - 打包选择环境, 自动识别 profile 文件 (配置相对复杂, pom + yml)
打包选择环境, 自动识别 profile 文件 (配置相对复杂, pom + yml)
image.png简要步骤
- 在 pom 中定义环境及
profileActive
(名字随便) - 打包选择环境, 根据
profileActive
加载 当前环境的 yml文件 (忽略其他环境的 yml 文件) -
application.yml
中使用profileActive
设置spring.profiles.active
相关文件
- pom.xml
- application.yml
- application-dev.yml
- application-prod.yml
pom.xml (根目录 <project>
下添加)
<!--配置不同的profile,对应不同的生产环境-->
<profiles>
<!-- 测试环境 -->
<profile>
<id>devEnv</id>
<properties>
<profileActive>dev</profileActive>
</properties>
<!-- 设置默认环境 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!-- 正式环境 -->
<profile>
<id>prodEnv</id>
<properties>
<profileActive>prod</profileActive>
</properties>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<!-- springboot使用maven打包的插件 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>application*.yml</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>application-${profileActive}.yml</include>
<include>application.yml</include>
<include>logback.xml</include>
</includes>
<!-- 开启替换标签,比如我们的'@profileActive'就是通过这个替换的 -->
<filtering>true</filtering>
</resource>
</resources>
</build>
application.yml
spring:
profiles:
active: '@profileActive@'
打包手动修改 spring.profiles.active
(配置简单, 仅 yml 文件)
单文件, 多 Profile 文档块模式
在 YAML 配置文件中,可以使用 ---
把配置文件分割成了多个文档块,因此我们可以在不同的文档块中针对不同的环境进行不同的配置,并在第一个文档块内对配置进行切换。[1]
server:
port: 8080
servlet:
context-path: /xx
tomcat:
uri-encoding: utf-8
swagger: # RESTful 风格的 Web 服务。
enabled: true # 开发环境启用 swagger
knife4j: # 前身是swagger-bootstrap-ui, 是一个纯 swagger-ui 的 ui项目
enable: true # 开启增强配置
production: false # 开启生产环境屏蔽
spring:
application:
name: xx # 应用名称
profiles:
active: prod # dev | prod
---
#开发环境
server:
port: 8081
swagger:
enabled: true
knife4j:
enable: true
production: false
spring:
config:
activate:
on-profile: dev
---
#生产环境
server:
port: 80
swagger:
enabled: false
knife4j:
enable: false
production: true
spring:
config:
activate:
on-profile: prod
多 Profile 文件方式
文件格式 application-{profile}.yml
/ application-{profile}.properties
,
{profile}
一般为各个环境的名称或简称,例如 dev
/ test
/ prod
-
application.yml
默认配置文件 -
application-dev.yml
开发环境配置文件 -
application-prod.yml
生产环境配置文件
application.yml
server:
port: 8080
servlet:
context-path: /xx
tomcat:
uri-encoding: utf-8
swagger: # RESTful 风格的 Web 服务。
enabled: true # 开发环境启用 swagger
knife4j: # 前身是swagger-bootstrap-ui, 是一个纯 swagger-ui 的 ui项目
enable: true # 开启增强配置
production: false # 开启生产环境屏蔽
spring:
application:
name: xx # 应用名称
profiles:
active: prod # dev | prod
application-dev.yml
#开发环境
server:
port: 8081
swagger:
enabled: true
knife4j:
enable: true
production: false
application-prod.yml
#生产环境
server:
port: 80
swagger:
enabled: false
knife4j:
enable: false
production: true