2015-10-26 23 views
0

我想根據JNDI條目導入資源。在Spring 4.x中基於JNDI導入資源

我的應用程序context.xml的樣子:

<jee:jndi-lookup id="td.naccms.cods2.config.path" 
    jndi-name="td.naccms.cods2.config.path" expected-type="java.lang.String" 
    default-value="classpath:application-context-persistence.xml" /> 

<context:property-placeholder /> 

<import resource="${td.naccms.cods2.config.path}" /> 

和Tomcat返回以下錯誤:

org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [application-context-cods2-web.xml]; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'td.naccms.cods2.config.path' in string value "${td.naccms.cods2.config.path}" 

注意,我並不想從屬性文件加載資源,因爲將根據JNDI改變進口資源。

+1

刪除jndi查找。春季環境已經爲你做了一次JNDI查詢。如果你想指定一個默認的':'來將它從佔位符中分離出來,例如'$ {td.naccms.cods2.config.path:classpath:application-context-persistence.xml}'。 –

+0

@ M.Deinum,謝謝它爲我工作。請輸入您的評論作爲答案,以便我可以標記爲已回答。另外,是否有任何文件供參考?默認值是我使用jndi-lookup的動機。 – Rafa

回答

0

當使用佔位符${...}時,您可以使用:來指定另一個值,以防表達式無法解析(甚至可能是另一個佔位符!)。

因此,自己不要使用查找自己而只是通過使用:來傳遞值。

<import resource="${td.naccms.cods2.config.path:classpath:application-context-persistence.xml}" /> 

Environment抽象(用來做在新版本的春季佔位符解析)也檢查JNDI爲旁邊的系統環境的屬性,屬性文件和Web應用程序的ServletContext(通過@PropertySource加載)。

+0

正是我在找的東西。謝謝。 – Rafa