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
以用于测试目的
选项 2(Spring 测试 fine-tuning 单独测试 class )
通过使用 @TestPropertySource
内联您想要的属性,直接在测试 class 上覆盖您的属性
选项 3(Spring 引导 - 多个属性文件或单个 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
我的 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
以用于测试目的
选项 2(Spring 测试 fine-tuning 单独测试 class )
通过使用 @TestPropertySource
内联您想要的属性,直接在测试 class 上覆盖您的属性选项 3(Spring 引导 - 多个属性文件或单个 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