这是我在pom.xml中的个人资料:
<!-- Production Profile -->
<profile>
<id>production</id>
<activation>
<property>
<name>profile</name>
<value>prod</value>
</property>
</activation>
<properties>
<build.profile.id>prod</build.profile.id>
</properties>
</profile>
<!-- Development Profile -->
<profile>
<id>development</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<build.profile.id>dev</build.profile.id>
</properties>
</profile>
<!-- Integration Test Profile -->
<!-- Use mvn -Dprofile=test -->
<profile>
<id>integration-test</id>
<activation>
<property>
<name>profile</name>
<value>test</value>
</property>
</activation>
<properties>
<!-- Used to locate the profile specific configuration file -->
<build.profile.id>test</build.profile.id>
<!-- Only integration tests are run. -->
<skip.integration.tests>false</skip.integration.tests>
<skip.unit.tests>true</skip.unit.tests>
</properties>
</profile>
接下来在我的春天上下文配置文件中我得到了:
@PropertySource("classpath:properties/app-${profile:dev}.properties")
因此,技巧允许我使用不同的配置运行我的项目。我还有3个配置属性文件,在该文件中有:
spring.profiles.active=integration-test
spring.profiles.active=prod
spring.profiles.active=dev
这种配置工作完美。活动配置文件会按照我的预期更改,例如,当我运行mvn clean install -Dprofile=test
时,我正在使用app-test.properties
文件而我的有效个人资料为integration-test
。
但这个技巧有一个问题。当有人运行mvn install -Pintegration-test时,活动配置文件是dev not integration-test。因此可以运行mvn install -Pintegration-test
然后将属性配置文件设置为test ??
答案 0 :(得分:2)
您不应该在每个环境中使用Maven配置文件。使用Maven,您可以构建jar / war / ear。不同的环境不应该导致另一个工件。因此,您应该将配置拉出此工件。 How to pass value to maven pom.xml at rum time from java file?描述了如何解决这个问题的很多选择。
答案 1 :(得分:0)
请尝试-P+integration-test
选项