2016-10-05 159 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;