Spring Boot 3.x 多环境配置详解

ops/2024/11/30 18:45:53/

一、引言

在软件开发过程中,通常需要将同一套代码部署到不同的环境中,如开发环境、测试环境、生产环境等。每个环境的配置(如数据库连接、服务器端口等)可能都不相同。

Spring Boot 3提供了强大的多环境配置功能,使得管理这些不同环境的配置变得简单而高效。本文将详细介绍Spring Boot 3中的多环境配置,包括配置方式、配置示例、激活方式、打包方式、最佳实践等内容。

二、配置方式

在Spring Boot 3中,多环境配置主要通过配置文件来实现。常见的配置文件格式有application.properties和application.yml(YAML格式)。针对不同的环境,可以创建不同的配置文件,并在其中定义相应的配置信息。

Properties配置方式

对于application.properties文件,可以通过创建多个以application-{profile}.properties命名的文件来定义不同环境的配置。其中,{profile}表示环境标识,如dev(开发环境)、test(测试环境)、prod(生产环境)等。

例如:

src/main/resources/  
├── application.properties  # 可以为空,或仅包含激活环境的配置  
├── application-dev.properties  # 开发环境配置
├── application-test.properties  # 测试环境配置
└── application-prod.properties # 生产环境配置

主配置文件application.properties通过spring.profiles.active属性来指定当前激活的环境。

配置示例

以下是一个具体的配置示例,展示了如何在Spring Boot 3中配置多环境。

开发环境配置(application-dev.properties)

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/devdb
spring.datasource.username=devuser
spring.datasource.password=devpassword

测试环境配置(application-test.properties)

server.port=8081
spring.datasource.url=jdbc:mysql://localhost:3306/testdb
spring.datasource.username=testuser
spring.datasource.password=testpassword

生产环境配置(application-prod.properties)

server.port=80
spring.datasource.url=jdbc:mysql://production-db-server:3306/proddb
spring.datasource.username=produser
spring.datasource.password=prodpassword

主配置文件(application.properties)

spring.profiles.active=dev

在这个示例中,通过application.properties文件中的spring.profiles.active属性指定了默认激活的开发环境。如果需要切换到其他环境,只需修改该属性的值即可。

YAML配置方式

单文件配置

  • 注意只有YAML支持—分隔的语法, Properties配置方式没有这种用法。
  • 不推荐这种用法,将多个环境配置放到一个文件不方便维护和管理

对于application.yml文件,可以通过在一个文件中使用多个文档块(以—分隔)来定义不同环境的配置。每个文档块中,通过spring.profiles属性来指定当前文档块对应的环境。

例如:

spring:profiles:active: dev
---
spring:profiles: dev
server:port: 8080
database:url: jdbc:h2:mem:devdb
---
spring:profiles: prod
server:port: 80
database:url: jdbc:mysql://prod-db-server:3306/proddb

多文件配置

对于YAML配置的多文件方式,文件的命名通常遵循application-{profile}.yml的格式,其中{profile}表示环境标识。

下面是多环境配置文件目录结构。

src/main/resources/  
├── application.yml  # 可以为空,或仅包含激活环境的配置  
├── application-dev.yml  # 开发环境配置
├── application-test.yml  # 测试环境配置
└── application-prod.yml # 生产环境配置

主配置文件application.yml中,通常不需要定义具体的环境配置,而是可以指定默认激活的环境或包含一些公共配置。

主配置文件(application.yml)

spring:profiles:active: dev  # 默认激活开发环境,可以根据需要修改为其他环境# 或者使用 include 引入多个配置文件(不推荐作为激活方式,但可用于包含公共配置)# include:#   - common

注意:在Spring Boot 2.4及更高版本中,spring.profiles.include属性被用于包含其他配置文件的内容,而不是用于激活环境。要激活特定环境,应使用spring.profiles.active属性或在启动时通过命令行参数、环境变量等方式指定。

开发环境配置文件(application-dev.yml)

server:port: 8080
spring:datasource:url: jdbc:mysql://localhost:3306/devdbusername: devuserpassword: devpassword
# 其他开发环境特有的配置...

测试环境配置文件(application-test.yml)和生产环境配置文件(application-prod.yml)的结构类似,只需将相应的配置值替换为对应环境的值即可。

三、激活方式

在Spring Boot 3中,可以通过多种方式激活特定的环境配置:

  1. 在配置文件中指定:如上所示,在application.properties或application.yml文件中通过spring.profiles.active属性指定。
    spring:
    profiles:
    active: dev # 默认激活开发环境,可以根据需要修改为其他环境
  2. 通过命令行参数指定:在启动应用程序时,通过命令行参数–spring.profiles.active来指定激活的环境。例如:
    java -jar myapp.jar --spring.profiles.active=prod
  3. 通过环境变量指定:设置环境变量SPRING_PROFILES_ACTIVE来指定激活的环境。例如:
    export SPRING_PROFILES_ACTIVE=prod
    java -jar myapp.jar
  4. 在IDE中指定:在使用IDE(如IntelliJ IDEA或Eclipse)运行应用程序时,可以在运行配置中指定激活的环境。

四、打包

在打包Spring Boot应用程序时,需要注意确保配置文件被正确包含在内。通常,使用Maven或Gradle等构建工具进行打包时,配置文件会自动被包含在生成的JAR或WAR包中。

如果需要为不同的环境打包不同的配置文件,可以使用Maven的profiles功能或Gradle的构建变体(build variants)来实现。例如,在Maven的pom.xml文件中定义不同的profiles,并在每个profile中指定要包含的配置文件。

下面是Maven打包多环境配置的方式。

  1. 修改主配置文件

配置文件目录如下:
在这里插入图片描述

在主配置文件application.yml中,使用占位符来指定当前激活的环境。例如:

spring:profiles:active: @profiles.active@

这里的@profiles.active@是一个占位符,它将在Maven打包时被替换为实际的环境标识。

注意,如果是直接在IDE中启动,需要使用标识dev/test/prod,这里修改为占位符,是为了后续使用打包命令。

  1. 配置Maven的pom.xml文件

接下来,需要在Maven的pom.xml文件中配置多个环境。这通常通过标签来实现。

例如:

<profiles><profile><id>dev</id><properties><!--  命名要和application-dev.yml配置文件-后面的一致  --><profiles.active>dev</profiles.active></properties><!--  默认激活环境  --><activation><activeByDefault>true</activeByDefault></activation></profile><profile><id>test</id><properties><profiles.active>test</profiles.active></properties></profile><profile><id>prod</id><properties><profiles.active>prod</profiles.active></properties></profile>
</profiles>

在上面的配置中,我们定义了三个环境:开发环境(dev)、测试环境(test)和生产环境(prod)。其中,开发环境被设置为默认激活的环境。

如果使用的IDE是IDEA,可以在maven工具栏看到环境。

在这里插入图片描述

  1. 配置资源过滤

为了使Maven在打包时能够替换主配置文件中的占位符,你需要在pom.xml中配置资源过滤。

例如:

<build><resources><resource><directory>src/main/resources</directory><filtering>true</filtering></resource></resources>
</build>

这里的true表示对资源文件进行过滤,即替换其中的占位符。

  1. 打包命令

在配置好上述内容后,你可以使用Maven的打包命令来生成不同环境的构建产物。

例如,要生成开发环境的构建产物,可以使用以下命令:

mvn clean package

由于开发环境被设置为默认激活的环境,因此上述命令将生成开发环境的构建产物。

要生成测试环境或生产环境的构建产物,可以使用-P参数来指定要激活的环境。例如:

mvn clean package -P test

mvn clean package -P prod

打开打包后的jar包,查看配置文件中的环境是否正确被替换。

在这里插入图片描述

上面的jar包是通过命令mvn clean package -P test打包的。

  1. 说明

1、占位符的使用:在Spring Boot项目中,通常使用@符号作为占位符的定界符。但是,在Maven中,你也可以使用${}作为占位符的定界符。不过,由于Spring Boot可能会覆盖Maven的默认行为,因此建议统一使用@符号作为占位符的定界符。
2、 资源文件的包含与排除:在pom.xml中配置资源过滤时,可以通过和标签来指定要包含或排除的资源文件。这有助于确保只有正确的资源文件被打包进最终的构建产物中。
3、 清理项目:在每次打包之前,建议使用mvn clean命令来清理项目。这有助于确保构建过程中不会产生任何旧的或不必要的文件。

通过以上步骤,你就可以在多配置环境下使用Maven进行打包了。这不仅可以提高你的开发效率,还可以确保不同环境的依赖和配置都能正确地被打包进最终的构建产物中。

五、注意事项

确保所有环境配置文件都放置在正确的目录下,并且文件名符合application-{profile}.yml的格式。

  • 如果主配置文件application.yml中同时使用了spring.profiles.active和spring.profiles.include属性,请注意它们的区别和用途。spring.profiles.active用于激活特定环境的配置,而spring.profiles.include用于包含其他配置文件的内容(这些被包含的文件可以是公共配置文件,而不是特定环境的配置文件)。
  • 在使用多文件方式时,如果某个环境需要覆盖或添加一些公共配置,可以在该环境的配置文件中进行定义。Spring Boot会按照配置文件的加载顺序(首先是application.yml或application.properties,然后是特定环境的配置文件)来合并配置。

六、最佳实践

在进行多环境配置时,遵循以下最佳实践可以提高配置管理的效率和可维护性:

  1. 统一管理配置信息:将所有配置信息统一放置在配置文件或配置类中,避免分散的配置信息。
  2. 使用外部配置:对于敏感信息或需要动态更新的配置,建议使用外部配置文件,并将其放置在安全可控的位置。
  3. 灵活命名配置文件:使用灵活的命名规则(如application-{profile}.properties)来管理配置文件,以便根据不同环境动态切换配置。
  4. 环境和配置的分离:将环境相关的配置与业务相关的配置进行分离,使得环境配置更加清晰,便于管理和维护。
  5. 使用动态配置:在运行时根据需要动态调整配置,以提高配置的灵活性。

七、结语

Spring Boot 3提供了强大的多环境配置功能,使得管理不同环境的配置变得简单而高效。通过合理的配置方式和激活方式,以及遵循最佳实践,可以大大提高配置管理的效率和可维护性。


http://www.ppmy.cn/ops/137998.html

相关文章

微知-git如何添加空目录的几种方式?(.gitkeep, githook, gitconfig)

背景 在Git中&#xff0c;空目录&#xff08;空文件夹&#xff09;默认是不会被跟踪的&#xff0c;因为Git主要跟踪文件的变化。但是如何让git添加空目录&#xff1f; #mermaid-svg-3Y4NksLyEeuMs4FC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-si…

Spring MVC练习(前后端分离开发实例)

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f439;今日诗词:二十五弦弹夜月&#xff0c;不胜清怨却飞来&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64f; ⛳️点赞 ☀️收藏⭐️关注&#x1f4…

第三百三十七节 JavaFX教程 - JavaFX矩形椭圆

JavaFX教程 - JavaFX矩形椭圆 avaFX Shape类定义了常见的形状&#xff0c;如线&#xff0c;矩形&#xff0c;圆&#xff0c;Arc&#xff0c;CubicCurve&#xff0c;Ellipse和QuadCurve。 在场景图上绘制矩形需要宽度&#xff0c;高度和左上角的&#xff08;x&#xff0c;y&…

Linux服务器CentOS操作系统运维用ntp和crontab同步网络时间

文章目录 一、概要描述二、具体操作1.查看服务器的时区2.安装ntp3.设置定时更新任务 一、概要描述 我们有台服务器&#xff0c;每隔3个月左右&#xff0c;时间会慢上超过1分钟&#xff0c;结果导致请求时间戳滞后&#xff0c;请求失败。 在经过1s钟的思索之后&#xff0c;想出…

创建型模式-建造者模式

建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;用于将一个复杂对象的构建过程与其表示分离&#xff0c;使得相同的构建过程可以创建不同的表示。 核心思想 将复杂对象的创建步骤分解开来&#xff0c;通过一步步的构建来完成对象的创建&a…

SQLServer如何导入数据库

环境&#xff1a; 操作系统&#xff1a;win11 数据库&#xff1a;SQL Server2019 数据库文件&#xff1a;先前备份的.bak文件。 前提&#xff1a;一定要切换到超管用户&#xff0c;如默认的sa用户&#xff0c;不然无权访问。 右键单击数据库&#xff0c;点击“还原数据库”。 …

RVO动态避障技术方案介绍

原文&#xff1a;RVO动态避障技术方案介绍 - 哔哩哔哩 我们在开发游戏的时候经常会遇到这样的问题&#xff0c;当我们寻路的时候&#xff0c;其它人也在寻路&#xff0c;如何避免不从其它人的位置穿过。这个叫做动态避障&#xff0c;目前主流的解决方案就是RVO。本节我们来介绍…

网络安全中的数据科学如何重新定义安全实践?

组织每天处理大量数据&#xff0c;这些数据由各个团队和部门管理。这使得全面了解潜在威胁变得非常困难&#xff0c;常常导致疏忽。以前&#xff0c;公司依靠 FUD 方法&#xff08;恐惧、不确定性和怀疑&#xff09;来识别潜在攻击。然而&#xff0c;将数据科学集成到网络安全中…