При использовании заполнителей для вывода конфигурации из файла 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, но это более подвержено ошибкам и также не будет работать, если в качестве фактической переменной среды задана строка, содержащая эту последовательность символов. Есть ли способ проверить, можно ли разрешить заполнитель, а не завершить ли значение после разрешения?