一、背景
- 在实际开发中一般都有多套环境,比如本地开发环境、测试环境、正式环境等等。他们有可能就是数据库连接地址,帐号,密码这些配置不同,所以打包到正式服的时候就要去改文件,这就很麻烦,有的时候可能忘记改,就打包到正式服引起一些程序异常。下面就来了解一些spring boot加maven 多环境打包,解决这个问题。
二、配置
<profiles>
<profile>
<id>dev</id>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<spring.profiles.active>prod</spring.profiles.active>
</properties>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>${maven-resources-plugin.version}</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
spring:
profiles:
active: @spring.profiles.active@
@spring.profiles.active@
使用的正式<profiles>
的配置,我这里本地开发环境和正式环境是2个yml文件拆分出来的,命令打包mvn clean package -Pprod
则会使用application-prod.yml
文件,active: @spring.profiles.active@
的值也就是active: prod
。基本上到这步已经可以满足需求了。当然你也可以就一个application.yml
所有可能会根据环境改变的参数配置在pom.xml
里然后application.yml
就写pom里的配置@xxx@
。- 后续功能:这里的
active: @spring.profiles.active@
,@
占位符也可以通过配置pom
自定义的,增加配置如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>${maven-resources-plugin.version}</version>
<executions>
<execution>
<id>default-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>target/classes</outputDirectory>
<useDefaultDelimiters>false</useDefaultDelimiters>
<delimiters>
<delimiter>#</delimiter>
</delimiters>
<resources>
<resource>
<directory>src/main/resources/</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
- 这里
<delimiter>#</delimiter>
用来增加一个占位符,Maven本身有占位符${xxx}
,但这个占位符被SpringBoot占用了,所以我们就再定义一个。<filtering>true</filtering>
表示打开过滤器开关,这样application.yml
文件中的#spring.profiles.active#
部分就会替换为pom.xml
里profiles
中定义的 spring.profiles.active
变量值。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现