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.

相关推荐
小杍随笔13 分钟前
【Rust Cargo 目录迁移到 D 盘:不改变安装路径和环境变量的终极方案】
开发语言·后端·rust
qq_2546744126 分钟前
Cisco Nexus 9504交换机上
java·linux·服务器
咕噜企业分发小米28 分钟前
腾讯云在多云管理工具上如何实现合规性要求?
java·云计算·腾讯云
invicinble1 小时前
关于对后端开发工程师,在项目层面的基本需求与进阶方向
java
懒鸟一枚1 小时前
Java17新特性详解
java
戌中横1 小时前
JavaScript 对象
java·开发语言·javascript
crossaspeed1 小时前
面向对象的三大特征和反射(八股)
java·开发语言
zfj3211 小时前
java synchronized关键字用法和底层原理
java·开发语言·轻量级锁·重量级锁·偏向锁·线程同步
梵高的代码色盘1 小时前
互联网大厂Java求职面试实录与技术深度解析
java·spring·缓存·微服务·面试·互联网大厂·技术深度
沐雨风栉1 小时前
用 Kavita+cpolar 把数字书房装进口袋
服务器·开发语言·数据库·后端·golang