我有一个用@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"
,它仍然会失败并出现相同的错误
答案 0 :(得分:0)
我通过在@value注释中的property-placeholder AND中定义默认值来解决这个问题:
<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;