如何将所选的Maven配置文件传递给Spring配置文件?

时间:2018-11-08 20:48:31

标签: java spring maven

我有3个Maven项目A,B,C。A是B的父项目,B是C的父项目。所有配置文件都在项目A的pom.xml中定义

在项目C中,我试图根据所选配置文件在spring-test-context(在 src / test / resources 下)中选择属性文件。对于回归测试 >,我们有2个属性文件:

  • application-test-local.properties
  • application-test.properties

在我们的Windows开发系统上,所选配置文件将是“本地”的,并且在服务器上也将相应地配置。选择“本地”配置文件时,应在测试Spring上下文中使用application-test-local.properties,否则应使用application-test.properties。在项目C 中的spring-test-context.xml中,我尝试了:

<beans profile="docker">
    <util:properties id="metaDbProps"  location="application-test-local.properties"/>
 </beans>
 <beans profile="default">
    <util:properties id="metaDbProps"  location="application-test.properties"/>
 </beans>

但是,当我尝试“ mvn clean test -Pdocker” 时,应用程序似乎无法将所选的Maven配置文件传递给spring配置文件,并且它始终会从“ < strong>默认”个人资料。

是否知道要解决的问题,以便将Maven配置文件传递给spring配置文件,以便它可以选择正确的属性文件?

为便于理解,以下是在项目A中如何定义配置文件:

<profiles>
     <!-- Windows development  -->
    <profile>
        <id>docker</id>
        <activation/>
        <properties>
            <INSTALL_MACHINE_LIST>localhost</INSTALL_MACHINE_LIST>
            <COPY_MODE>local</COPY_MODE>
        </properties>
    </profile>
    <!-- Development -->
    <profile>
        <id>dev</id>
        <activation/>
        <properties>
            <INSTALL_MACHINE_LIST>dev01</INSTALL_MACHINE_LIST>
        </properties>
    </profile>
    <!-- QA -->
    <profile>
        <id>qa</id>
        <activation/>
        <properties>
            <INSTALL_MACHINE_LIST>dqa01</INSTALL_MACHINE_LIST>
        </properties>
    </profile>
    <!-- Production -->
    <profile>
        <id>prod</id>
        <activation/>
        <properties>
            <INSTALL_MACHINE_LIST>prod01</INSTALL_MACHINE_LIST>
        </properties>
    </profile>
</profiles>

1 个答案:

答案 0 :(得分:1)

默认情况下,Maven测试是使用Maven Surefire Plugin运行的。您可以在您的Maven配置文件中将Spring配置文件声明为属性:

<profile>
  <id>docker</id>
  <properties>
    <spring.profiles.active>docker</spring.profiles.active>
  </properties>
</profile>

,然后使用<argLine>配置将其传递给Surefire:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <argLine>-Dspring.profiles.active=@{spring.profiles.active} @{argLine}</argLine>
      </configuration>
    </plugin>
  </plugins>
</build>

请注意@{...}语法:

  

由于版本2.17对argLine使用了替代语法,因此@ {...}允许在执行插件时延迟替换属性,因此可以正确选择由其他插件修改的属性