Spring Boot 如何使用 Maven 实现多环境配置管理

Spring Boot 如何使用 Maven 实现多环境配置管理

实现多环境配置有以下几个重要原因:

  • 适应不同的部署环境:在实际部署应用程序时,通常会有多个不同的部署环境,如开发环境、测试环境、生产环境等。每个环境可能需要不同的配置,例如数据库连接信息、日志级别、缓存配置等。通过实现多环境配置,可以方便地适应不同的部署环境,而无需手动修改配置文件。

  • 提高灵活性和可维护性:通过将不同环境的配置分离开来,可以提高系统的灵活性和可维护性。开发人员可以专注于当前环境的配置,而不必担心影响其他环境的配置。同时,当需要修改某个环境的配置时,也可以更加方便地进行管理和维护。

  • 降低人为错误的风险:手动修改配置文件很容易引入人为错误,特别是在频繁切换环境或部署时。通过实现多环境配置,可以减少手动操作的风险,提高系统的稳定性和可靠性。

  • 支持持续集成和持续部署:在持续集成和持续部署的过程中,需要自动化地构建和部署应用程序到不同的环境。多环境配置可以帮助自动化流程更加顺利地进行,从而提高开发和部署的效率。

项目目录结构:

POM 配置

在pom.xml文件中,使用maven-profile和maven-resources-plugin插件来实现多环境配置管理。在插件配置中,可以指定不同的配置文件,根据不同的环境打包不同的配置文件。

java 复制代码
<profiles>
   <!-- 本地开发 -->
    <profile>
        <id>dev</id>
        <properties>
            <env>dev</env>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <!-- 测试 -->
    <profile>
        <id>test</id>
        <properties>
            <env>test</env>
        </properties>
    </profile>
    <!-- 生产 -->
    <profile>
        <id>prod</id>
        <properties>
            <env>prod</env>
        </properties>
    </profile>
</profiles>

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
        <resource>
            <directory>src/main/resources-env/${env}</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

src/main/resources 配置文件

application.yml

java 复制代码
spring:
  #  Spring Boot 2.4为了提升对Kubernetes的支持 将 spring.profiles 作废了
  #  profiles:
  #    active: config,config1,config2,config3
  # 替换上面作废的spring.profiels.actice配置参数
  config:
    import: application-config.yml,application-config1.yml,application-config2.yml,application-config3.yml

application-config.yml

java 复制代码
biz:
  total: application

src/main/resources-env/ 多环境配置文件

本地开发

dev/application-config1.yml

java 复制代码
biz:
  env: dev-environment
  profile: dev-profile

生产

prod/application-config1.yml

java 复制代码
biz:
  env: prod-environment
  profile: prod-profile

测试

test/application-config1.yml

java 复制代码
biz:
  env: test-environment
  profile: test-profile

编写测试代码

PropertiesApplication 启动类

java 复制代码
@SpringBootApplication
public class PropertiesApplication {

    public PropertiesApplication(Environment environment) {
        String total = environment.getProperty("biz.total");
        String env = environment.getProperty("biz.env");
        String profile = environment.getProperty("biz.profile");

        System.out.println("total = " + total + ", env = " + env + ", profile = " + profile);
    }

    public static void main(String[] args) {
        SpringApplication.run(PropertiesApplication.class, args);
    }
}

环境测试

dev环境

java 复制代码
 <profile>
    <id>dev</id>
    <properties>
        <env>dev</env>
    </properties>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
</profile>

打印信息:total = application, env = dev-environment, profile = dev-profile

test环境

java 复制代码
 <profile>
    <id>test</id>
    <properties>
        <env>test</env>
    </properties>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
</profile>

打印信息:total = application, env = test-environment, profile = test-profile

相关推荐
颜酱9 分钟前
# 02 | 搭骨架:用 LangGraph 编排 12 步工作流(思路)
前端·人工智能·后端
颜酱10 分钟前
02 | 搭骨架:用 LangGraph 编排 12 步工作流
前端·人工智能·后端
嘉伟桑1 小时前
Python调用电价API返回JSON示例:分时电价、现货电价和字段解析
后端
武子康1 小时前
Shippy:确定性工具、会话级 Sandbox 与 Live-Data Eval(4 类收敛 + 7 步实现方案 + 6 类评测指标)
前端·人工智能·后端
我叫黑大帅2 小时前
我为什么单一消费者的场景下,要用 Redis List 当消息队列?
redis·后端·面试
AskHarries2 小时前
文件上传系统
后端
豆角焖肉3 小时前
Maven进阶与搭建私服
java·maven
止语Lab3 小时前
好的 DX 不等于少写代码——三种语言的摩擦力设计课
后端
吃饱了得干活3 小时前
别再手动解析 LLM 输出了!LangChain 四种结构化输出方案对比
后端·python·langchain
程序员天天困3 小时前
Arthas trace 命令怎么用?一行定位最慢那行代码
jvm·后端