maven mvn测试-覆盖www.example.com中的值application.properties

7jmck4yq  于 2022-11-02  发布在  Maven
关注(0)|答案(5)|浏览(207)

我的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'

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

b5buobof

b5buobof1#

应该可以这样做:

<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中,在测试过程中,该文件将具有更高的优先级。

jgwigjjp

jgwigjjp2#

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

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

这也应该可以:

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

编辑自2021年4月

上述语法对Sping Boot 1.X有效。对于Spring Boot 2.0/2.1,请用途:

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

在Sping Boot 2.2中,语法再次发生了变化(使用空格作为分隔符):

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
bttbmeg0

bttbmeg03#

选项1(* 首选,因为Maven结构特定 *)

test/resources下创建一个application.properties,以便进行测试

选项2(*Spring测试单独微调特定的测试类 *)

通过使用@TestPropertySource内联所需的属性,直接在Test类上重写属性

选项3(*Sping Boot -多个属性文件或单个YAML文件 *)

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

gmol1639

gmol16394#

创建另一个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
wnavrhmk

wnavrhmk5#

我没有看到很多人使用环境变量选项。如果你为相应的属性设置了一个环境变量,那么环境变量中的值就会被使用。
环境变量:用户my.test.server.com:5432/myDatabase名=另一个用户名
在属性文件中:用户名=我的用户名=我的用户名
应用程序将使用环境变量中的值。要使其正常工作,您需要遵循命名约定。使用大写字母并将“.”替换为“_"。

相关问题