[Java] Spring Boot 多环境配置

2022-06-26  本文已影响0人  巨馍蘸酱

一个项目通常会存在多个环境,例如,开发环境、测试环境和生产环境等

打包选择环境, 自动识别 profile 文件 (配置相对复杂, pom + yml)

image.png

简要步骤

  1. 在 pom 中定义环境及 profileActive (名字随便)
  2. 打包选择环境, 根据 profileActive 加载 当前环境的 yml文件 (忽略其他环境的 yml 文件)
  3. application.yml 中使用 profileActive 设置 spring.profiles.active

相关文件

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

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

鸣谢


  1. http://c.biancheng.net/spring_boot/profile.html

上一篇下一篇

猜你喜欢

热点阅读