mvn test - переопределить значения в 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'
Но это не похоже на работу. Как я могу переопределить значения в application.properties
в контексте бега mvn test
?
5 ответов
Примерно так должно работать:
<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
, Во время тестирования этот файл будет иметь больший приоритет.
При переопределении параметров в командной строке используйте запятую в качестве разделителя, а не пробел:
mvn test -Drun.arguments='--spring.datasource.url=...,--spring.datasource.username=...'.
Это должно работать тоже:
mvn test -Dspring.datasource.url=... -Dspring.datasource.username=...
Другие ответы и комментарии упоминают с помощью профилей и ставят кастомы application.properties
в /src/test/resources
, что не является приемлемым решением для вас, так как вы используете разные конвейеры, но если я правильно помню, вы можете даже использовать application-{profile}.properties
в /src/test/resources
, Таким образом, вы сможете поддерживать один тестовый профиль для каждого конвейера, в который вы помещаете свои пользовательские параметры, а затем тестировать свой конвейер с помощью:
mvn test -Dspring.profiles.active=foobar
Создать другой application-dev.properties
файл и вставить:
spring.datasource.url=jdbc:postgresql://my.test.server.com:5432/myDatabase
spring.datasource.username=anotherUsername
Затем запустите с опцией -Dspring.profiles.active=dev
в вашем mvn
команда.
- Например:
mvn test -Dspring.profiles.active=dev
Вы можете добавить столько профилей, сколько необходимо.
- синтаксис:
application-<profile name>.properties
Вариант 1 (предпочтителен, поскольку зависит от структуры Maven)
Создать application.properties
под test/resources
быть выбранным для ваших целей тестирования
Вариант 2 (точная настройка Spring Test только для конкретного класса Test)
Переопределите свои свойства непосредственно в классе Test, вставив те, которые вы хотите, используя @TestPropertySource
Вариант 3 (Spring Boot - несколько файлов свойств или один файл YAML)
Сгруппируйте реквизиты под Spring Profile ( пример здесь) и вызовите его напрямую из maven: mvn test -Dspring.profiles.active="myOtherSpringProfile"
Я не вижу много людей, использующих параметр переменной среды. Если вы установите переменную среды для соответствующих свойств, будет использоваться значение переменной среды. например
Переменные среды: SPRING_DATASOURCE_URL="jdbc:postgresql://my.test.server.com:5432/myDatabase" SPRING_DATASOURCE_USERNAME=anotherUsername
Внутри файла свойств: spring.datasource.url=jdbc:postgresql://localhsost:5432/myDatabasespring.datasource.username=myUsername
Приложение будет использовать значения переменных среды. Чтобы это работало, вам нужно следовать соглашению об именах. Используйте верхний регистр и замените "." с "_".