【问题标题】:Default value for spring @Value annotationspring @Value 注解的默认值
【发布时间】:2016-10-05 09:13:10
【问题描述】:

我有一个用 @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",它仍然会失败并出现同样的错误

【问题讨论】:

  • 您是否验证过您的 some_property_not_configured 是有效的 jndi 名称

标签: spring properties annotations jndi default-value


【解决方案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;

【讨论】:

    猜你喜欢
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 2017-01-20
    • 2018-07-14
    • 2017-08-12
    相关资源
    最近更新 更多