ReloadableResourceBundleMessageSource vs ResourceBundleMessageSource - 缓存概念&其他差异

时间:2016-09-25 09:35:52

标签: java spring properties-file resourcebundle reloadable

我正在学习春天。 我尝试使用ResourceBundleMessageSource,这是我尝试的例子。

主要应用程序

'transform': 'translate(' + animationProperties.amount + !important')'

的beans.xml

public class MainApp {

    public static void main(String arg[]){
        ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");



        String text = context.getMessage("s.wish",
                new Object[] {"saro", "stanes" },
                                        Locale.ENGLISH);

        System.out.println("English... " + text);

        String text2 = context.getMessage("s.wish",
                new Object[] {"saro", "stanes" },
                                        Locale.FRANCE);

        System.out.println("French... " + text2);
    }
}

messages_en_US.properties

<!-- resource bundle -->
     <bean id="messageSource"
        class="org.springframework.context.support.ResourceBundleMessageSource ">
        <property name="basename" value="resources/locale/messages"/>

    </bean>

messages_fr_FR.properties

s.wish=good morning, name : {0}, school : {1}

输出:

s.wish=bonjour, name : {0}, school : {1}

从我理解的文档中,ReloadableResourceBundleMessageSource比ResourceBundleMessageSource更先进。

1)它不仅限于读取.properties文件,还可以读取xml属性文件。

2)它不仅限于从类路径中读取文件,而是从任何位置读取文件。

“cacheSeconds”的概念是什么?      

English... good morning, name : saro, school : stanes
French... bonjour, name : saro, school : stanes

有人可以简要介绍一下,或者帮助我做一个更好理解的例子。

1 个答案:

答案 0 :(得分:2)

设置缓存已加载属性文件的秒数。

  • 默认为&#34; -1&#34;,表示永远缓存(就像java.util.ResourceBundle一样)。
  • 正数会在指定的秒数内缓存已加载的属性文件。这实际上是刷新检查之间的间隔。 请注意,刷新尝试将在实际重新加载之前首先检查文件的上次修改时间戳;所以如果文件没有改变,这个间隔可以设置得相当低,因为刷新尝试实际上不会重新加载。
  • 值&#34; 0&#34;将检查每次消息访问时文件的最后修改时间戳。不要在生产环境中使用它!

请注意,根据您的ClassLoader,过期可能无法可靠地工作,因为ClassLoader可能会保留捆绑文件的缓存版本。

在这种情况下,优先使用ResourceBundleMessageSource上的ReloadableResourceBundleMessageSource,并结合非类路径位置。