PropertySource необязательно переопределяет значение по умолчанию в файле свойств с именами переменных - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть проект Serenity-BDD на IntelliJ с Serenity-Spring и несколькими файлами .properties, по одному для каждой среды развертывания (dev, qa, production), с базовым файлом .properties, который содержит переменные для localhost.

test.properties
test-dev.properties
test-qa.properties
test-prod.properties

Я передаю аргумент в моей команде CLI (-Denvironment), чтобы выбрать файл .properties, который будет переопределять базу.

./gradlew build -Denvironment

В моем @PropertiesSource указаны оба файла с переменной среды для файла переопределения:

@PropertySource(value = {"test.properties", "test-${environment}.properties"}, ignoreResourceNotFound = true)

Однако, когда я запускаю это локально через IntelliJ (что означает отсутствие переменной -Denvironment, означает localhost и требуется только файл test.properties), я получаю следующую ошибку в своем выводе:

ИНФОРМАЦИЯ: Свойства location [test - $ {environment} .properties] не разрешимы: не удалось разрешить местозаполнитель 'environment' в значении "test - $ {environment} .properties"

Что именно это за ошибка, и как лучше всего ее исправить?

1 Ответ

0 голосов
/ 18 сентября 2018

Поскольку вы жестко закодировали факт загрузки двух файлов свойств, я бы использовал механизм значений по умолчанию Spring SpEL:

@PropertySource(value = {"test.properties", "test-${environment:local}.properties"})

Таким образом, когда нет среды , Spring загрузит test.properties и test-local.properties .

Это нормально, что у вас ошибка [test - $ {environment} .properties] не разрешаема , поскольку заполнители разрешаются до загрузки PropertySources (что логично, если вы об этом думаете) .

Кроме того, ignoreResourceNotFound = true подвержен ошибкам, и я не рекомендую использовать его в рабочем коде.

Если бы вы использовали только один файл, вы могли бы пойти с

@PropertySource("${environment:local}.properties")

Вот что будет загружено Spring:

  • => local.properties
  • -Denvironment = uat => uat.properties
  • -Denvironment = prod => prod.properties
...