转载自http://dolszewski.com/spring/spring-boot-properties-per-maven-profile/
有些团队更喜欢为每个应用程序运行时环境提供单独的Maven构建配置文件,例如dev,test,prod等。在本文中,我将向您展示如何使用Spring Boot配置文件连接Maven配置文件。您将学习如何使用Maven的pom.xml文件设置活动的Spring配置文件。
您将使用Spring Boot application.properties文件来激活其中一个配置文件。如果您的应用程序资源中没有该文件,则现在是创建该文件的正确时机。
通常,我们希望使用Maven选择活动的Spring配置文件来构建具有所选配置文件的JAR / WAR文件。该演示将向您展示如何做到这一点。
首先,创建两个额外的配置文件。文件名应与模式application- {profile} .properties匹配。将文件添加到Maven项目的src / main / resources目录中,位于主application.properties文件旁边。
然后是时候修改你的pom.xml了。您创建了两个配置文件,因此现在需要定义两个Maven配置文件。
在两个Maven配置文件中,定义一个自定义属性并调用它,例如,activateProperties。这个名字并不重要。更重要的是它的价值。
自定义Maven属性的值应与要使用相应Maven配置文件激活的Spring配置文件匹配。在我们的示例中,我们将它们称为dev和release。
此外,您可以标记默认情况下运行的一个Maven配置文件。如果您不自行选择一个配置文件,则以下示例将激活第一个配置文件。
<profile>
<id>devid>
<properties>
<activatedProperties>devactivatedProperties>
properties>
<activation>
<activeByDefault>trueactiveByDefault>
activation>
profile>
<profile>
<id>releaseid>
<properties>
<activatedProperties>releaseactivatedProperties>
properties>
profile>
让我们留在pom.xml片刻。在上一步中,您定义了Maven和Spring配置文件之间的映射。但您仍需要将配置文件映射传输到Spring Boot应用程序中。
怎么样?
您将使用Maven 在application.properties文件中使用定义的Maven配置文件中的值设置名为spring.profiles.active的 Spring属性。顾名思义,此属性负责激活Spring配置文件。
为此,您需要允许Maven在构建过程中操作资源文件。您可以通过在pom.xml中启用Resources插件的过滤来完成此操作。但是,如果使用spring-boot-starter-parent作为pom.xml的父级,则可以跳过此步骤。
<build>
<resources>
<resource>
<directory>src/main/resourcesdirectory>
<filtering>truefiltering>
resource>
resources>
…
build>
现在是时候迈出最后一步了。将以下行添加到application.properties文件中。
spring.profiles.active=@activatedProperties@
*@*字符之间的值必须与Maven配置文件中的自定义属性匹配。
运行构建时,Resources Plugin将使用当前活动的Maven配置文件中的属性替换application.properties中的activatedProperties占位符。
启动应用程序后,Spring框架将激活已过滤的application.properties文件中定义的Spring配置文件。接下来,框架根据活动配置文件读取其他application- {profile} .properties文件。
需要注意的是: Spring Boot 1.3替换了过滤值的默认Resources Plugin语法。框架使用*@ activatedProperties @而不是$ {activatedProperties}*表示法。
新建application-prod.yml, application-dev.yml, application-test.yml
内容如下:
#application-dev.yml
server:
port: 8081
#application-test.yml
server:
port: 8082
#application-prod.yml
server:
port: 8083
在pom文件中添加:
<profiles>
<profile>
<id>devid>
<activation>
<activeByDefault>trueactiveByDefault>
activation>
<properties>
<profileActive>devprofileActive>
properties>
profile>
<profile>
<id>testid>
<properties>
<profileActive>testprofileActive>
properties>
profile>
<profile>
<id>prodid>
<properties>
<profileActive>prodprofileActive>
properties>
profile>
profiles>
application.yml中添加
spring:
profiles:
active: @profileActive@ #这个必须和pom中自定义字段意义
这是我们设置的是启动id为test的配置, 这时@profileActive@被替换成test