根据 Maven 的不同 profiles 来改变 Spring Boot 应用程序的配置
在 Maven 的 pom.xml 文件中,你可以定义多个 profiles,每个 profile 可以包含一组特定的配置属性。这些属性可以被传递到 Spring Boot 的 application.properties 或 application.yml 文件中,以便根据不同的环境(如开发、测试、生产)来调整配置。
下面是一个如何在 pom.xml 中定义 profiles,并在 application.properties 中引用这些属性的示例。
在 pom.xml 中定义 Profiles
首先,在 pom.xml 中定义不同的 profiles,例如开发(dev)和生产(prod)环境:
<profiles>
<profile>
<id>dev</id>
<properties>
<env.database.url>jdbc:mysql://localhost:3306/devdb</env.database.url>
<env.database.user>devuser</env.database.user>
<env.database.password>devpassword</env.database.password>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<env.database.url>jdbc:mysql://production.server:3306/proddb</env.database.url>
<env.database.user>produser</env.database.user>
<env.database.password>prodpassword</env.database.password>
</properties>
</profile>
</profiles>
在 application.properties 中使用 Maven Filters
为了根据 Maven 的 profiles 动态地设置 application.properties 的值,你可以使用 Maven 的资源过滤功能。首先,你需要创建一个 application.properties 的模板文件,比如 src/main/resources/application.properties.template:
properties
spring.datasource.url=
e
n
v
.
d
a
t
a
b
a
s
e
.
u
r
l
s
p
r
i
n
g
.
d
a
t
a
s
o
u
r
c
e
.
u
s
e
r
n
a
m
e
=
{env.database.url} spring.datasource.username=
env.database.urlspring.datasource.username={env.database.user}
spring.datasource.password=${env.database.password}
然后,在 pom.xml 中配置资源过滤:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>application.properties.template</include>
</includes>
<targetPath>${project.build.outputDirectory}/resources</targetPath>
<renaming>
<rename>application.properties.template,application.properties</rename>
</renaming>
</resource>
</resources>
</build>
注意:这里的配置可能需要根据你的项目结构和 Maven 版本进行调整。有些 Maven 插件(如 maven-resources-plugin)可能提供了更直接的方式来处理资源过滤和重命名。