Spring的属性文件

时间:2015-08-13 08:23:54

标签: java spring-mvc

我有一个Spring(maven)项目,我正在使用属性文件。此属性文件包含UI标签和消息。 在源代码属性文件位置是src / main / resources / message / ApplicationResources.properties 该项目的输出是WAR文件。 war中属性文件的位置是WEB-INF / classes / message / ApplicationResources.properties

我正在尝试使用此属性文件,如下所示

select distinct sirm.attribute
from store_item_received_material sirm
where sirm.store_item_id in (select si.id from store_item si where si.program_id = 9 and si.customer_id = 1 and si.date_processed is not null);

但每次我都低于异常

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basenames">
        <value>classpath*:message/ApplicationResources</value>
    </property>
</bean>

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
        <value>classpath*:message/ApplicationResources</value>
</property> 
<property name="ignoreUnresolvablePlaceholders" value="true"/>
</bean>

我做了很多谷歌并尝试了几乎所有选项,但没有任何对我有用。几乎没有选择

Caused by: org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: class path resource [message/ApplicationResources] cannot be opened because it does not exist
at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:89)

4 个答案:

答案 0 :(得分:1)

请尝试将您的配置更改为:

<property name="locations">
    <list>
        <value>classpath*:message/ApplicationMessages.properties</value>
    </list>
</property>

<property name="location">
       <value>classpath*:message/ApplicationMessages.properties</value>
</property>

答案 1 :(得分:0)

我遇到了一些类似的问题,最后让它指向资源文件名,而没有指定目录。我的示例使用了几个文件,但它几乎相同:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basenames" value="classpath:applicationMessages,classpath:ValidationMessages"/>
</bean>

答案 2 :(得分:0)

如果您的ApplicationMessage.properties位于src / main / resources / message中,则必须使用

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
   <property name="basenames">
       <value>classpath*:/message/ApplicationResources</value>
   </property>
</bean>

(小心/ message /)。

如果你不在类路径的开头使用/,则它会引用当前文件夹。使用/它是类路径的根文件夹(又名src / main / resources)

答案 3 :(得分:0)

最后我找到了解决方案。以下配置对我有用。

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

<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basenames" value="WEB-INF/classes/message/ApplicationResources"/>
</bean>