Maven项目:Spring无法使用PropertyPlaceholderConfigurer在src / main / resources中找到属性文件

时间:2013-10-14 10:33:53

标签: java spring maven

Spring无法在src / main / resources中找到我的属性文件(MyPropFile.properties)并抛出如下所示的异常

java.io.FileNotFoundException: class path resource [file*:/src/main/resources/MyPropFile.properties] cannot be opened because it does not exist

但是如果我将MyPropFile.properties放在项目的根目录(MyProject / MyPropFile.properties),spring就可以找到它并且程序可以正常执行。

如何配置它以便我可以将.properties文件放在src / main / resources中

这是我的命名空间

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
    http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context-3.0.xsd
    ">

这是我的豆子

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

爪哇:

@Value("${message.fromfile}")
      private String message;

先谢谢你们。

4 个答案:

答案 0 :(得分:2)

试试这个。在您的应用程序配置文件中输入以下内容:

<beans xmlns:context="http://www.springframework.org/schema/context"
 .....
 xsi:schemaLocation="...
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context-3.0.xsd
 ....>

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

并访问消息属性:

@Value("${messageFromfile}")
private String message;

答案 1 :(得分:1)

我希望Maven将其复制到 target 目录并适当地设置类路径。我不希望Maven在编译时搜索 source 目录。

答案 2 :(得分:1)

你应该使用

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
            <value>classpath:/MyPropFile.properties</value>
        </property>
</bean>

如果没有classpath:前缀,PropertyPlaceholderConfigurer正在尝试将资源解析为文件资源,那么在当前工作目录中查找它。

答案 3 :(得分:0)

作为 @ryanp 解决方案的补充,这是处理文件资源的正确和清理方式,应该位于 classpath 位置。

Maven将自动收集配置的文件资源并将其附加到运行时 classpath 持有者,以便可以解析以 classpath: 为前缀的资源

否则,如果您发现Maven的自我堆栈无法传输文件资源,您可以挂钩Maven的资源配置并映射您的文件位置,如下所示:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>*.properties</include>
            </includes>
        </resource>
    </resources>
</build>