#spring #properties #annotations #jndi #default-value
#spring #свойства #аннотации #jndi #значение по умолчанию
Вопрос:
У меня есть свойство с аннотацией @Value
, обычно заполняемое из context.xml (jndi/tomcat)
@Value("${some.property}")
private String property
Это работает нормально, но у нас есть установки нашего программного обеспечения, где это свойство не должно быть настроено.
Однако, если свойство отсутствует, я получаю javax.naming.NameNotFoundException: Name [some.property] is not bound in this Context. Unable to find [some.property].
, что логично.
Я попытался исправить это, добавив значение по умолчанию таким образом:
@Value("${some.property:some_property_not_configured}")
private String property
Тем не менее, я все еще получаю ту же ошибку.
Есть идеи, как это предотвратить / исправить?
Я хотел бы использовать это в среде Spring 3.2.x и Spring 4 . Аннотация @Value доступна из Spring 3
ОБНОВЛЕНИЕ: проблема была не в аннотации @Value, а в app-config.xml
<entry key="some.property">
<jee:jndi-lookup jndi-name="java:comp/env/some.property" />
</entry>
Это вызвало ошибку во время запуска!
Однако, если я добавлю default-value="something"
здесь, он все равно завершится с той же ошибкой
Комментарии:
1. вы проверили, что ваше some_property_not_configured является допустимым именем jndi
Ответ №1:
Я решил эту проблему, определив значение по умолчанию в свойстве-заполнителе И в аннотации @value:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="properties">
<bean class="java.util.Properties">
<constructor-arg>
<map>
<entry key="some.property">
<jee:jndi-lookup jndi-name="java:comp/env/some.property" default-value="not_configured" />
</entry>
</map>
</constructor-arg>
</bean>
</property>
</bean>
и:
@Value(value = "${some.property:not_configured}")
private String property;