2014-01-29 99 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

是这两个都是在相同的文件中以相同的顺序定义的。 –