Spring Boot 多环境配置与切换

embedded/2025/1/8 19:20:45/

Spring Boot 多环境配置与切换

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


1. 配置 pom.xml

pom.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 文件中使用占位符动态替换环境变量:

# Tomcat
server:port: 9201# Spring
spring: application:# 应用名称name: mall-systemprofiles:# 环境配置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. 打包与测试

使用以下命令进行打包:

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.


http://www.ppmy.cn/embedded/152356.html

相关文章

回归预测 | MATLAB实LSTM多输入单输出回归预测

回归预测 | MATLAB实LSTM多输入单输出回归预测 目录 回归预测 | MATLAB实LSTM多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 LSTM多输入单输出回归预测 程序设计 完整代码&#xff1a;MATLAB实LSTM多输入单输出回归预测 %% 清空环境变量 warni…

Win10和11 git/Android Studio遇到filename too long问题的解决

1、打开windows长文件、长路径支持&#xff1a; 可以参考这篇文章&#xff1a; 修改注册表方法&#xff1a; 使用Admin登陆machine&#xff0c;在run中输入regedit并回车&#xff1b; 找到路径 ’Computer -> HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -&g…

性能测试03|JMeter:断言、关联、web脚本录制

目录 一、断言 1、响应断言 2、json断言 3、持续时间断言 二、关联 1、正则表达式介绍 2、正则表达式提取器 3、Xpath提取器 4、JSON提取器 5、JMeter属性 三、web脚本录制 一、断言 定义&#xff1a;让程序自动判断实际的返回结果是否与预期结果保持一致 自动校验…

STM32-WWDG/IWDG看门狗

WWDG/IWDG一旦开启不能关闭&#xff0c;可通过选项字节在上电时启动硬件看门狗&#xff0c;看门狗计数只能写入不能读取。看门狗启用时&#xff0c;T6bit必须置1&#xff0c;防止立即重置。 一、原理 独立看门狗-超时复位 窗口看门狗-喂狗&#xff08;重置计数器&#xff0c;…

iOS - 消息机制

1. 基本数据结构 // 方法结构 struct method_t {SEL name; // 方法名const char *types; // 类型编码IMP imp; // 方法实现 };// 类结构 struct objc_class {Class isa;Class superclass;cache_t cache; // 方法缓存class_data_bits_t bits; // 类的方法…

各知名云平台对于 MySQL TDE的支持汇总和对比

MySQL Community TDE功能介绍&#xff1a; TDE: Transparent Data Encryption, 也就是透明传输加密。在MySQL community官网上有这样原文介绍&#xff1a;With MySQL version 5.7.12 and up, Oracle continues to improve MySQL’s security features by adding MySQL Enterpr…

vulnhub靶场-potato(至获取shell)

arp-scan -l 扫描IP 使用御剑端口扫描扫描端口&#xff0c;扫到了80和7120两个端口&#xff0c;其中7120为ssh端口 使用dirb http://192.168.171.134 扫描目录 发现info.php 访问为phpinfo界面 访问192.168.171.134为一个大土豆&#xff0c;没什么用 所以我们从ssh入手 盲…

Couchbase 和数据湖技术的区别、联系和相关性分析

Couchbase 和数据湖技术&#xff08;如 Delta Lake、Apache Hudi、Apache Iceberg&#xff09;分别是两类不同的数据存储与管理系统&#xff0c;但它们也可以在特定场景中结合使用&#xff0c;以下是它们的区别、联系和相关性分析&#xff1a; 区别&#xff1a; 1. 核心用途&a…