运行 SpringBootTest 使用 maven 给出的 spring 配置文件

running SpringBootTest using a spring profile given by maven

我在我的 maven pom 中得到了以下配置文件:

    <profiles>
        <profile>
            <id>local</id>
                <build>
                    <plugins>
                        <plugin>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-maven-plugin</artifactId>
                            <configuration>
                                <profiles>
                                    <profile>local</profile>
                                </profiles>
                            </configuration>
                        </plugin>
                    </plugins>
                </build>
        </profile>
    <profile>

这对于启动应用程序来说很好,但是如果我想按如下方式构建应用程序 mvn clean install -Plocal 我的 @SpringBootTest 由于以下原因失败:

No active profile set, falling back to default profiles: default

也尝试过:

        <profile>
            <id>local</id>
                <build>
                    <plugins>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-failsafe-plugin</artifactId>
                            <configuration>
                                <argLine>-Dspring.profiles.active=local</argLine>
                            </configuration>
                        </plugin>
                    </plugins>
                </build>
        </profile>

我错过了什么?

ps mvn spring-boot:run -Plocal 没问题... 也不感兴趣 mvn clean install -Dspring.profiles.active=local 我知道这行得通,但不感兴趣,因为配置文件包含的不仅仅是我们的配置文件!

(你的)Spring-boot-maven-plugin(配置)不受“安装”目标的影响(它只涉及spring-boot:repackage,不知道“活动配置文件”/此配置),这就是为什么您的配置文件(虽然已传播)未在您的测试中激活的原因。

如果您希望它适用于 mvn install,您必须通过:

-Dspring.profiles.active=local

至:

  • surefire-插件

    在 pom(>配置文件>构建>插件)中:

    <plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <argLine>-Dspring.profiles.active=local</argLine>
      </configuration>
    </plugin>
    

    或通过命令。 Plugin-Doc.

  • failsafe-plugin ... 类似!;) Plugin-Doc.

  • 也许更多...(启动 spring-boot 的任何其他插件。)


  • 当然,请不要“忘记”@ActiveProfiles,它会激活(更准确地说是添加!)配置文件到您的测试(类)中。 (但独立构建;)

  • 并且(当然;)您还可以在应用程序的某处(properties/any 位置)(几乎)任何“maven 构建”中“打包”spring.profiles.active

    例如:

    • pom.xml:

       <profile>
        <id>local</id>
        <properties>
          <myProfiles>local,foo,bar</myProfiles>
        </properties>
       </profile>
       <!-- ... and (outside/in default profile!) -->
       <build>
        <testResources>
          <testResource>
            <directory>src/test/resources</directory>
            <filtering>true</filtering>
          </testResource>
        </testResources>
        <!-- ... -->
      </build>
      
    • src/test/resources/application.属性:

       spring.profiles.active=${myProfiles}
      
    • 将写入 target/test-classes/application.properties:

       spring.profiles.active=local,foo,bar
      

      ...,将(希望)被“下一次测试”拾取并激活。