Почему значение по умолчанию в 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;
}
Другие вопросы по тегам