У меня есть компонент, который заполняет свойства, используя аннотацию @Value, подобную этой
@Value("${propbean.value : 'None'}")
private String value;
В моем контексте приложения я имею следующую конфигурацию
<bean id="propbean"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
p:location="file:${path}/values.properties"
p:ignoreResourceNotFound="true"
p:ignoreUnresolveablePlaceholders="true" />
Когда файл values.properties отсутствует, значения по умолчанию "Нет" устанавливаются как ожидалось, однако, когда присутствует файл свойств, значения по умолчанию все еще используются, хотя я получаю сообщение журнала, в которое загружен файл свойств от PropertyPlaceholderConfigurer
190315 14.23.44,517 {} {} {} INFO (PropertiesLoaderSupport.java:172) Loading properties file from URL [file:/path/to/file/values.properties]
Мне нужно, чтобы значения по умолчанию вступали в силу только тогда, когда отсутствовал файл свойств и/или заполнители не были разрешимы; не всегда. Я также пытался использовать SPEL, но поскольку это объект PropertyPlaceholderConfigurer, а не для использования директивы, решение SPEL не работает для меня. Я понимаю, что при использовании формата $ {value: default} для заполнителей, что значение по умолчанию заменяется только тогда, когда значение равно null, однако, если я удалю ":" Нет "из замещающего значения, свойство будет правильно разрешено!
Надеюсь, это поможет кому-то в будущем - проблема заключается в том, что p:ignoreUnresolveablePlaceholders="true"
свойство в определении bean-компонента. По-видимому, это инструктирует Spring игнорировать свойства, которые читаются в bean-компоненте, независимо от того, будет ли установлено значение по умолчанию.
Удаление свойства/установка в false устраняет проблему полностью.