Как сделать так, чтобы Spring не работал быстро при использовании заполнителей с @ConfiguraitonProperties, а переменная окружения не задана? - PullRequest
1 голос
/ 30 октября 2019

При использовании заполнителей для вывода конфигурации из файла application.yaml и связанного с ним класса свойств как убедиться, что Spring не запускается при запуске, когда не удается разрешить заполнитель вместо того, чтобы просто использовать сам заполнитель в качестве дословного значения?

Например, для данного файла application.yaml:

example.key: ${MY_ENV_VAR}

и для этого свойства POJO:

@ConfigurationProperties(prefix="example")
public class AcmeProperties {
  public String key;
  // Getters, setters, constructors omitted... 
}

если MY_ENV_VAR не установлен в системе, как заставить Spring выбросить исключение при запуске вместо установки key в буквально ${MY_ENV_VAR}?

Обратите внимание, Spring не возвращает пустую строку, которую мы могли бы принудительно определить, задав значение по умолчанию с помощью ${MY_ENV_VAR:defaultValue} или null ( SpEL не оценивается в @ConfigurationProperties,так что это не может быть определено как значение по умолчанию, и поведение System.getenv("MY_ENV_VAR"), возвращающее null в случае неопределенной переменной среды, не отражается), оно буквально использует заполнитель в качестве значения. Вместо этого мы бы предпочли, чтобы Spring полностью прекратил запуск приложения для всех свойств в AcmeProperties. Просто использование @Validated с Hibernate Validator на пути к классам не делает этого, равно как и @ConfigurationProperties(prefix="example", ignoreInvalidFields=false) (что в любом случае по умолчанию ).

Ручная проверка значения, содержащего *Конечно, 1040 * можно добавить ко всем String свойствам в POJO, но это более подвержено ошибкам и также не будет работать, если в качестве фактической переменной среды задана строка, содержащая эту последовательность символов. Есть ли способ проверить, можно ли разрешить заполнитель, а не завершить ли значение после разрешения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...