我使用的是spring-web mvc项目,我将所有与spring相关的文件都放在WEB-INFspring
下,包括一个ormlite.xml
和一个jdbc.properties
。
现在我想在ormlite.xml
中找到jdbc.properties
文件,如下所示:
<context:property-placeholder location="/WEB-INF/spring/jdbc.properties"/>
但当我运行应用程序时,它会告诉我:
Could not load properties
它找不到属性文件。
问题出在哪里?
来自春季论坛:
问题是/WEB-INF不可访问,因为它不在根目录中对于路径,必须使用与测试用例中使用的路径相同的路径(包括src/main/webapp部分,但这会破坏您的应用程序停止运行)。
我建议您将jdbc.properties移到src/main/resources目录,并简单地使用classpath:prefix来加载属性。
代码:
<context:property-placeholder location="classpath:jdbc.properties"/>
上面的代码假设它们位于类路径的根上(即当它们在
src/main/resources
中时它们在哪里)。
我希望这能帮助其他人。
我遇到了同样的问题-类路径之外的属性文件。
我的解决方案:
首先定义一个属性bean:
<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location">
<value>/WEB-INF/your.properties</value>
</property>
</bean>
然后在属性占位符中引用它:
<context:property-placeholder properties-ref="configProperties" />
对我来说效果非常好!
代替:
<context:property-placeholder location="/WEB-INF/spring/jdbc.properties"/>
用途:
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
p:location="/WEB-INF/spring/jdbc.properties"/>
您的属性将在Spring文件中可用,不要忘记添加一个名称空间:xmlns:p="http://www.springframework.org/schema/p"
我认为您缺少指示Spring如何尝试加载属性的前缀。我认为你的定义应该是:
<context:property-placeholder location="file:/WEB-INF/spring/jdbc.properties"/>
请注意添加了文件:前缀。