2014-01-29 130 views
4

我想在我的應用程序中第一次使用Spring <context:property-placeholder>並遇到一些問題,我已經嘗試了許多已經Google的東西,並且似乎已經少有超過SO的帖子。無法解析佔位符| Spring佔位符

我有一個Web應用程序,需要通過一些關鍵基礎類,在考慮使用佔位符爲same.Here的是

Main 
    -java 
    -resources 
    -webapp 

我有一個project.properties文件,該文件是我的應用程序的結構resource文件夾內,這就是我正在嘗試

<context:property-placeholder location="classpath:resources/project.properties" /> 
<beans:bean id="reCaptcha" class="net.tanesha.recaptcha.ReCaptchaImpl"> 
    <beans:property name="privateKey" value="${demo.recapatcha_private_key}"/> 
    <beans:property name="publicKey" value="${demo.recapatcha_public_key}"/> 
</beans:bean> 

但我在服務器啓動時得到以下異常

org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'reCaptcha' defined in ServletContext resource [/WEB-INF/spring/appServlet/servlet-context.xml]: Could not resolve placeholder 'demo.recapatcha_private_key' 

我已經嘗試將project.properties在不同的位置,包括內部 WEB-INF/classes和其他幾個位置在webapp但沒有success.not肯定我在做什麼錯誤的文件

回答

6

這聽起來好像你使用Maven項目結構。將您的project.properties放置在src/main/resources的內部是資源文件的常規做法 - 因爲Maven會自動將這些文件傳輸到最終制品的類路徑中 - 在戰爭中將爲/WEB-INF/classes

但是,您應該修改<context:property-placeholder>標記的location屬性並刪除resources文件夾前綴。當war文件被構建時,resources文件夾本身不會被傳輸到/WEB-INF/classes - 因此不會成爲運行時類路徑的一部分。只是傳輸文件夾內容。

<context:property-placeholder location="classpath:project.properties" /> 
+1

我已經嘗試過你沒有成功表明,事實上我的理解是一樣的,你概括 –

+0

是'<背景:物業佔位符>'聲明和'servlet-定義的佔位符自己所有context.xml'? –

+0

是這兩個都是在相同的文件中以相同的順序定義的。 –