无法解决占位符|春季占位符

时间:2014-01-29 16:44:12

标签: spring

我正在尝试在我的应用程序中第一次使用Spring <context:property-placeholder>并遇到一些问题,我已经尝试了许多已经谷歌的东西,而且似乎很少有帖子超过SO。

我有一个Web应用程序,需要将一些键传递给底层类,正在考虑使用占位符。这是我的应用程序的结构

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文件放在包含inside的各个位置 WEB-INF/classes以及webapp处的其他几个位置,但没有成功。不确定我做错了什么

1 个答案:

答案 0 :(得分:6)

听起来好像你正在使用Maven项目结构。将project.properties置于src/main/resources内是资源文件的常规做法 - 因为Maven会自动将这些传输到最终工件的类路径中 - 在战争中/WEB-INF/classes

但是,您应修改location标记的<context:property-placeholder>属性并删除resources文件夹前缀。构建war文件时,resources文件夹本身不会传输到/WEB-INF/classes,因此不会成为运行时类路径的一部分。只传输文件夹内容。

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