Spring Boot 多环境配置与切换

news/2025/1/8 21:21:08/

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/news/1561635.html

相关文章

javafx 将项目打包为 Windows 的可执行文件exe

要将 JavaFX 项目打包为 .exe 文件&#xff0c;你可以使用一些工具将你的应用程序封装为 Windows 可执行文件。以下是两种常用的方法&#xff1a; 方法 1&#xff1a;使用 jpackage&#xff08;适用于 JDK 14 及更高版本&#xff09; jpackage 是 JDK 内置的工具&#xff0c;…

云从科技Java面试题及参考答案

高并发情况下的解决策略有哪些? 在高并发情况下,有多种解决策略。 首先是缓存策略。可以使用像 Redis 这样的缓存系统。缓存热门数据,比如在电商系统中,商品的基本信息、热门商品的详情等可以放入缓存。当有大量用户请求这些数据时,直接从缓存中读取,大大减少数据库的压力…

[ Android ] Google JetPack架构指南

文章目录 架构原则架构分层关于DomainLayer架构选型参考JetPack架构组件参考网站 架构原则 UI和数据分离&#xff0c;不要将所有代码写在Activity和Fragment里面 数据驱动UI&#xff0c;最好是持久性数据模型 单一数据源&#xff0c;集中修改数据&#xff0c;比如基于Databas…

【小程序开发】- 小程序版本迭代指南(版本发布教程)

一&#xff0c;版本号 版本号是小程序版本的标识&#xff0c;通常由一系列数字组成&#xff0c;如 1.0.0、1.1.0 等。版本号的格式通常是 主版本号.次版本号.修订号 主版本号&#xff1a;当小程序有重大更新或不兼容的更改时&#xff0c;主版本号会增加。 次版本号&#xff1a…

Java基于SSM框架的影院选座系统小程序【附源码、文档】

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

【Altium】AD使用智能粘贴功能把多个网络标签改成端口

1、 文档目标 使用智能粘贴功能把多个网络标签&#xff08;net lable&#xff09;改成端口&#xff08;port&#xff09; 2、 问题场景 客户有一份原理图&#xff0c;网络用的是net label&#xff0c;没用Port&#xff0c;然后创建一个sheet symbol&#xff0c;但是sheet sy…

GoZero项目中解决`go.mod`和`go.sum`校验和不匹配问题的解决方案

在使用GoZero框架进行微服务开发时&#xff0c;项目依赖管理是非常重要的&#xff0c;Go模块&#xff08;Go Modules&#xff09;为我们提供了一个可靠的工具来管理依赖。在这个过程中&#xff0c;go.mod和go.sum文件起着至关重要的作用&#xff0c;它们确保了项目的依赖版本和…

解读注解@SpringBootApplication

SpringBootApplication 注解 是 Spring Boot 项目中非常核心的注解&#xff0c;通常用于标注 Spring Boot 应用的启动类。它是一个复合注解&#xff08;composite annotation&#xff09;&#xff0c;包含了多个重要的功能。在 Spring Boot 2.5.6 中&#xff0c;它的作用和原理…