Используя Sprint Boot 2.0.4.RELEASE , у меня есть следующий класс свойств (упрощенный):
@Configuration
@EnableConfigurationProperties(MyOtherHierarchicalNonConstantProperties.class)
public class AppConfiguration {
public static final String MY_CONSTANT = "${path.to.my-constant}";
}
и application.yml
(также упрощенный):
path.to.my-constant: mystring
Проблема
Значение из application.yml
никогда не присваивается MY_CONSTANT
, что необходимо для использования в качестве аргумента для аннотаций.(Я хочу, чтобы все настраиваемые параметры между средами сборки устанавливались в application.yml
!). Значение MY_CONSTANT
в итоге становится ${path.to.my-constant}
.
Я почти весь день работал над этой проблемой., также пробовал несколько различных вариантов после большого количества поиска, таких как:
${${path.to.my-constant}}
# 1 #{${path.to.my-constant}}
# 2 ${#{path.to.my-constant}}
#{'${path.to.my-constant}'}
- и многое, многое другое ...
Дополнительная (возможно, полезная) информация
В некоторых случаях я получаю точное выражение какзначение строки (как сказано выше), но в некоторых случаях я получаю исключения, такие как:
- # 1:
IllegalArgumentException
из PropertyPlaceholderHelper.parseStringValue
, говоря Could not resolve placeholder 'mystring' in value "${${path.to.my-constant}}"
- # 2:
SpelEvaluationException
из PropertyOrFieldReference.readProperty
с высказыванием EL1008E: Property or field 'mystring' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext' - maybe not public or not valid?
Оба указывают на то, что если исходное выражение будет дополнительно заключено в другие скобки SpEL, внутреннее выражение преобразуется в требуемое значение.Но после этого он отказывается извлекаться из внешних фигурных скобок.(В течение довольно долгого времени я пытался сотнями операций SpEL попытаться и каким-то образом «извлечь» значение из внешних фигурных скобок ...)
Одна вещь, которую я также пробовал, это перемещение константы вкласс других свойств с аннотацией @ConfigurationProperties
в надежде, что это что-то изменит, но результаты кажутся идентичными.
Plea
Мне известен вопрос о назначении свойств конфигурации для констант в Spring Bootменя много спрашивали, я также попробовал каждый вариант на планете Земля после того, как пришел сюда, чтобы спросить об этом, и я безнадежно потерян.
Кто-то, пожалуйста, раз и навсегда,положить конец этому жалкому отсутствию единого источника правды о настраиваемых константных выражениях и рассказать нам, как сделать это правильно! (И если Spring Boot никогда не предполагал, что это будет возможно, эта информация также может быть полезна длязнаю ...)
PS!Никаких неприятных хаков, пожалуйста ...