美文网首页
[Java] Spring Boot 多环境配置

[Java] Spring Boot 多环境配置

作者: 巨馍蘸酱 | 来源:发表于2022-06-26 17:38 被阅读0次

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

    • 打包手动修改 spring.profiles.active (配置简单, 仅 yml 文件)
    • 打包选择环境, 自动识别 profile 文件 (配置相对复杂, pom + yml)

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

    image.png

    简要步骤

    1. 在 pom 中定义环境及 profileActive (名字随便)
    2. 打包选择环境, 根据 profileActive 加载 当前环境的 yml文件 (忽略其他环境的 yml 文件)
    3. 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
    

    鸣谢


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

    相关文章

      网友评论

          本文标题:[Java] Spring Boot 多环境配置

          本文链接:https://www.haomeiwen.com/subject/eshovrtx.html