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

相关推荐
天才梦浪几秒前
wsl的网络导致springboot启动提示端口占用
网络·spring boot·后端
xiaoye37081 分钟前
Spring如何处理线程并发问题
java·后端·spring
前端付豪13 分钟前
拍照识题 OCR
前端·后端·python
Chan1616 分钟前
LeetCode 热题 100 | 链表
java·数据结构·spring boot·算法·leetcode·链表·java-ee
weixin_7042660516 分钟前
[特殊字符] Spring IOC/DI 核心知识点 CSDN 风格总结
java·后端·spring
常利兵19 分钟前
Spring Boot 4.0 牵手RabbitMQ:注解魔法开启消息之旅
spring boot·rabbitmq·java-rabbitmq
拾贰_C20 分钟前
[spring boot | springboot web ] spring boot web项目启动失败问题
前端·spring boot·后端
indexsunny21 分钟前
互联网大厂Java面试实录:Spring Boot与微服务在电商场景中的应用解析
java·spring boot·面试·kafka·spring security·电商·microservices
用户8815869109123 分钟前
别再把微服务当银弹了!深度剖析...
spring boot
诚实可靠小郎君_dpc26 分钟前
如何把特斯拉接入OpenClaw,让🦞做你的行车小助理
后端·agent