spring @Value注释的默认值

时间:2016-10-05 09:13:11

标签: spring properties annotations jndi default-value

我有一个用@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 个答案:

答案 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;