Почему значение по умолчанию в Spring Value не предотвращает ошибку NULL?
У меня есть следующее определение моего свойства в коде Java:
import org.springframework.beans.factory.annotation.Value;
...
@Value("#{sdProperties['is.test.server'] ?: false }")
private boolean isTestServer = false;
Также в файле конфигурации XML у меня есть:
<util:properties id="sdProperties">
<prop key="sdzootest.server.url">${sdzootest.server.url}</prop>
<prop key="is.test.server">${is.test.server}</prop>
</util:properties>
Тем не менее, я получаю ошибку, если is.test.server
не указан в файле свойств:
2016-04-06 15: 52: 00,161 [localhost-startStop-1] ОШИБКА com.elasticpath.web.context.impl.EpContextConfigListener:69 - Произошло исключение. org.springframework.beans.factory.BeanDefinitionStoreException: недопустимое определение компонента с именем sdProperties, определенным в null: не удалось разрешить заполнитель 'is.test.server' в строковом значении "${is.test.server}"
1 ответ
PlaceholderConfigurerSupport
имеет особое свойство ignoreUnresolvablePlaceholders
Если конфигуратор не может разрешить заполнитель, генерируется исключение BeanDefinitionStoreException. Если вы хотите проверить несколько файлов свойств, укажите несколько ресурсов через свойство location. Вы также можете определить несколько конфигураторов, каждый из которых имеет свой собственный синтаксис. Используйте ignoreUnresolvablePlaceholder, чтобы преднамеренно подавить исключение, если заполнитель не может быть разрешен.
Непонятно, как вы настраиваете поддержку заполнителей, поэтому здесь несколько вариантов:
<context:property-placeholder
ignore-unresolvable="true"
location="classpath:app.properties"/>
или же
@Bean
public PropertySourcesPlaceholderConfigurer ppc() {
PropertySourcesPlaceholderConfigurer ppc = new PropertySourcesPlaceholderConfigurer();
ppc.setIgnoreUnresolvablePlaceholders(true);
return ppc;
}