外部属性文件为Spring MessageSource无法正常工作

时间:2014-01-10 05:25:24

标签: java spring

请考虑以下代码:

<bean id="busmessageSource" 
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>classpath:bundles/resource</value>
            <value>classpath:bundles/override</value>
            <value>file:/C:/mmt/override</value>
        </list>
    </property>
    <property name="cacheSeconds" value="100" />
</bean>

当我致电bundles/resource

时,我会抓取bundles/overridebusmessageSource.getMessage("anykey", null, null)中的属性

但是当我尝试在C:/mmt/override

中获取属性的值时,它失败了
  1. 使用磁盘中的外部文件配置messagesource的正确方法是什么。
  2. 另外,如果存在相同的密钥,我希望file:/C:/mmt/override覆盖classpath:bundles/override中的值。如何覆盖war文件夹之外的外部文件中的属性?

3 个答案:

答案 0 :(得分:7)

1。)我有以下三种方式:

<beans:bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <beans:property name="basename">
        <beans:value>file:/path/to/messages</beans:value>
    </beans:property>
</beans:bean>

注1 必须使用} file:前缀和ReloadableResourceBundleMessageSource类。

Note2 将&#34; .properties&#34;扩展

2。)在加载具有相同属性名称(键)的新属性文件时,可以覆盖以前的值。您必须确保最后获取要使用的属性文件。

答案 1 :(得分:3)

你可以尝试

<bean id="messageSource"
  class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="defaultEncoding" value="UTF-8"/>
    <property name="basenames">
        <list>
            <value>classpath:bundles/resource</value>
            <value>classpath:bundles/override</value>
            <value>file:C:/mmt/override</value>
        </list>
    </property>
</bean>

关于消息资源备注:

  1. 普通路径将相对于当前应用程序上下文。
  2. “classpath:”URL将被视为类路径资源。
  3. “file:”URL将从绝对文件系统路径加载。
  4. 任何其他网址,例如“http:”也是可以的。

答案 2 :(得分:0)

我遇到了类似的问题(通过问题的标题)并设法用java.util.Properties实例化Spring ResourceBundleMessageSource

ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setCommonMessages(properties);

有点天真的方法,但是我的单元测试工作。