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

Приложение будет использовать значения переменных среды. Чтобы это работало, вам нужно следовать соглашению об именах. Используйте верхний регистр и замените "." с "_".

Другие вопросы по тегам