Spring Boot 多环境配置与切换

Spring Boot 多环境配置与切换

当在多配置文件中,需要切换配置文件时,通常的做法都是修改激活的文件名称,而spring.profiles.active=@profiles.active@是配合maven profile进行选择不同配置文件进行启动,可以避免修改文件,而在maven打包是指定使用哪个配置文件。


1. 配置 pom.xml

pom.xml 中定义不同环境的配置属性:

xml 复制代码
<profiles>
    <!-- 开发环境 -->
    <profile>
		<id>dev</id>
		<properties>
			<spring.profile>dev</spring.profile>
			<nacos.server.address>192.168.0.121:8848</nacos.server.address>
		</properties>
		<activation>
            <!--是否默认激活,idea开发右侧的maven-install中,profiles默认选中dev-->
			<activeByDefault>true</activeByDefault>
		</activation>
	</profile>
	
    <!-- 测试环境 -->
    <profile>
		<id>test</id>
		<properties>
			<spring.profile>test</spring.profile>
			<nacos.server.address>192.168.157.130:8848</nacos.server.address>
		</properties>
		<activation>
			<activeByDefault>false</activeByDefault>
		</activation>
	</profile>
    
    <!-- 本地环境 -->
    <profile>
        <id>local</id>
        <properties>
            <spring.profile>test</spring.profile>
            <nacos.server.address>127.0.0.1:8848</nacos.server.address>
        </properties>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
    </profile>

    <!-- 生产环境 -->	
    <profile>
		<id>prod</id>
		<properties>
			<spring.profile>prod</spring.profile>
			<nacos.server.address>47.96.94.207:8848</nacos.server.address>
		</properties>
		<activation>
			<activeByDefault>false</activeByDefault>
		</activation>
	</profile>
</profiles>

<build>
    <!-- Maven 资源配置 -->
    <resources>
        <!--
            目的(作用):关闭过滤 src/main/resources 路径下的所有文件,确保部分资源文件在构建过程中不被 Maven 过滤器处理。
            注意:适用于二进制文件、图像文件等不需要替换变量的资源文件,比如图标文件、静态 HTML 文件等。
        -->
        <resource>
            <directory>src/main/resources</directory>
            <!-- 关闭过滤 -->
            <filtering>false</filtering>
        </resource>

        <!--
            目的(作用):启用过滤 src/main/resources 路径下以指定前缀命名的文件,确保只有特定文件在构建过程中被 Maven 过滤器处理。
            注意:适用于文本文件,如配置文件,其中包含需要在构建时替换的变量(例如:将 ${server.port} 替换为具体的值)。
        -->
        <resource>
            <directory>src/main/resources</directory>
            <!-- 引入所有 匹配文件进行过滤 -->
            <includes>
                <include>application*</include>
                <include>bootstrap*</include>
                <include>banner*</include>
            </includes>
            <!-- 启用过滤 即该资源中的变量将会被过滤器中的值替换 -->
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

2. 修改配置文件

application.ymlbootstrap.yml 文件中使用占位符动态替换环境变量:

yml 复制代码
# Tomcat
server:
  port: 9201

# Spring
spring: 
  application:
    # 应用名称
    name: mall-system
  profiles:
    # 环境配置
    active: @spring.profile@
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: @nacos.server.address@
      config:
        # 配置中心地址
        server-addr: @nacos.server.address@
        # 配置文件格式
        file-extension: yml
        # 共享配置
        shared-configs:
          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

说明

  • @spring.profile@@nacos.server.address@ 将在打包过程中被替换为 pom.xml 中的配置值。
  • spring.cloud.nacos.config.shared-configs 支持动态加载不同环境的配置文件。

3. 打包与测试

使用以下命令进行打包:

bash 复制代码
mvn clean package -P dev  # 开发环境
mvn clean package -P test # 测试环境
mvn clean package -P prod # 生产环境
打包细节说明
  1. 占位符替换 : 在打包过程中,Maven 会根据激活的 Profile 自动将配置文件中的占位符替换为对应的值。
    • 示例:如果激活的是 test 环境:
      • @spring.profile@ 被替换为 test
      • @nacos.server.address@ 被替换为 192.168.157.130:8848
  2. 激活方式
    • 默认激活:<activeByDefault>true</activeByDefault> 确保在未指定 Profile 时使用默认配置。
    • 手动激活:使用 -P 参数指定 Profile,例如 -P prod
  3. 替换规则 : Maven 会将 <properties> 中定义的变量值应用于资源文件中启用了过滤的部分(如 application.yml)。
验证
  1. 打包后检查目标文件: 查看生成的 target 文件夹,确保配置文件中的占位符已正确替换。
  2. 启动应用: 使用不同环境的包运行应用,确保环境配置符合预期。

注意事项

  1. Profile 命名规范 : 确保 <id>application-{profile}.yml 中的 {profile} 一致。
  2. 环境隔离: 不同环境的配置应独立管理,避免交叉影响。
  3. 默认配置文件: 确保未激活任何 Profile 时,应用能够使用默认配置文件正常运行。

总结

通过以上配置,Spring Boot 项目可以实现环境的无缝切换,提升了开发和部署的效率,同时降低了配置出错的风险。

在打包过程中,Maven会根据指定的Profile将配置文件中的占位符(如 @nacos.server.address@)替换为对应Profile中定义的属性值。例如,使用 test Profile打包时,@nacos.server.address@ 将被替换为 192.168.157.130:8848.

相关推荐
小许学java4 分钟前
Spring事务和事务传播机制
java·数据库·spring·事务
大学生资源网5 分钟前
基于Javaweb技术的宠物用品商城的设计与实现(源码+文档)
java·mysql·毕业设计·源码·springboot
汤姆yu7 分钟前
基于springboot的热门文创内容推荐分享系统
java·spring boot·后端
星光一影7 分钟前
教育培训机构消课管理系统智慧校园艺术舞蹈美术艺术培训班扣课时教务管理系统
java·spring boot·mysql·vue·mybatis·uniapp
lkbhua莱克瓦2410 分钟前
MySQL介绍
java·开发语言·数据库·笔记·mysql
武昌库里写JAVA13 分钟前
在iview中使用upload组件上传文件之前先做其他的处理
java·vue.js·spring boot·后端·sql
董世昌4116 分钟前
什么是事件冒泡?如何阻止事件冒泡和浏览器默认事件?
java·前端
好度23 分钟前
配置java标准环境?(详细教程)
java·开发语言
嘻哈baby26 分钟前
AI让我变强了还是变弱了?一个后端开发的年终自省
后端
teacher伟大光荣且正确28 分钟前
关于Qt QReadWriteLock(读写锁) 以及 QSettings 使用的问题
java·数据库·qt