mvn test - 覆盖 application.properties 中的值

mvn test - override values in application.properties

我的 application.properties 中有这些属性:

spring.datasource.url=jdbc:postgresql://localhsost:5432/myDatabase
spring.datasource.username=myUsername

我想 运行 mvn test 使用除上述以外的其他值,例如:

spring.datasource.url=jdbc:postgresql://my.test.server.com:5432/myDatabase
spring.datasource.username=anotherUsername

我尝试了以下方法

mvn test -Drun.arguments='--spring.datasource.jdbc:postgresql://my.test.server.com:5432/myDatabase --spring.datasource.username=anotherUsername'

并且没有 spring 前缀:

mvn test -Drun.arguments='--datasource.jdbc:postgresql://my.test.server.com:5432/myDatabase --datasource.username=anotherUsername'

但这似乎不起作用。如何在 运行ning mvn test 的上下文中覆盖 application.properties 中的值?

像这样的东西应该可以工作:

  <plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.20.1</version>
    <configuration>
      <systemPropertyVariables>
        <spring.datasource.jdbc>value</spring.datasource.jdbc>
      </systemPropertyVariables>
    </configuration>
  </plugin>

但更常见的是,我们将 application.properties 的测试版本放入 src/test/resources 中。在测试期间,该文件将具有更高的优先级。

创建另一个 application-dev.properties 文件并粘贴:

spring.datasource.url=jdbc:postgresql://my.test.server.com:5432/myDatabase
spring.datasource.username=anotherUsername

然后 运行 在 mvn 命令中使用选项 -Dspring.profiles.active=dev

  • 例如:mvn test -Dspring.profiles.active=dev

您可以根据需要添加任意数量的配置文件。

  • 语法:application-<profile name>.properties

选项 1首选 Maven structure-specific

test/resources 下创建一个 application.properties 以用于测试目的

选项 2Spring 测试 fine-tuning 单独测试 class

通过使用 @TestPropertySource

内联您想要的属性,直接在测试 class 上覆盖您的属性

选项 3Spring 引导 - 多个属性文件或单个 YAML 文件

将道具分组在 Spring 配置文件 (Example here) 下并直接从 maven 调用它:mvn test -Dspring.profiles.active="myOtherSpringProfile"

在命令行中覆盖参数时,使用逗号作为分隔符,而不是 space:

mvn test -Drun.arguments='--spring.datasource.url=...,--spring.datasource.username=...'

这也应该有效:

mvn test -Dspring.datasource.url=... -Dspring.datasource.username=...

从 2021 年 4 月开始编辑

上面的语法对 Spring Boot 1.X 有效。 使用 Spring Boot 2.0/2.1,使用:

mvn test -Dspring-boot.run.arguments='--spring.datasource.url=...,--spring.datasource.username=...'

并且在 Spring Boot 2.2 中,语法再次更改(使用白色 space 作为分隔符):

mvn test -Dspring-boot.run.arguments='--spring.datasource.url=... --spring.datasource.username=...'

其他答案和评论提到使用配置文件并在 /src/test/resources 中放置自定义 application.properties,这对您来说不是一个可行的解决方案,因为您使用不同的管道,但如果我没记错的话,您可以甚至在 /src/test/resources 中使用 application-{profile}.properties。这样,您应该能够为每个管道维护一个测试配置文件,您可以在其中放置自定义参数,然后使用以下方法测试您的管道:

mvn test -Dspring.profiles.active=foobar