2016-10-05 47 views
0

我有一个属性标注为@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可从春天3+

UPDATE: 问题是不与@Value注释,但在app-config.xml中

<entry key="some.property"> 
    <jee:jndi-lookup jndi-name="java:comp/env/some.property" /> 
</entry> 

这在启动时造成的错误时间!

不过,如果我添加default-value="something"在这里,它仍然失败,相同的错误

+0

您是否验证了您的some_property_not_configured是有效的jndi名称 – kuhajeyan

回答

0

我通过在属性占位符,并在@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;