ReloadableResourceBundleMessageSource vs ResourceBundleMessageSource - концепция кэша и другие различия

Я учу весну. Я пытался использовать ResourceBundleMessageSource, и вот пример, который я пробовал.

Основное приложение

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);
    }
}

beans.xml

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

    </bean>

messages_en_US.properties

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

messages_fr_FR.properties

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

выход:

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

Из документов, которые я понимаю, ReloadableResourceBundleMessageSource намного более продвинут, чем ResourceBundleMessageSource.

1) Не ограничено чтение только файлов.properties, но может также читать файлы свойств xml.

2) Это не ограничено чтением файлов только из classpath, но из любого места.

Какова концепция вокруг "cacheSeconds"

class="org.springframework.context.support.ReloadableResourceBundleMessageSource ">
        <property name="basename" value="resources/locale/messages"/>
        <property name="cacheSeconds" value="3600"/>
    </bean> 

Может ли кто-нибудь проинформировать об этом или помочь мне с примером, чтобы лучше понять.

1 ответ

Установите количество секунд для кэширования загруженных файлов свойств.

  • По умолчанию используется значение "-1", указывающее на постоянное кэширование (как в java.util.ResourceBundle).
  • Положительное число будет кэшировать загруженные файлы свойств в течение заданного количества секунд. По сути, это интервал между проверками обновления. Обратите внимание, что попытка обновления сначала проверит последнюю измененную временную метку файла перед его фактической перезагрузкой; поэтому, если файлы не меняются, этот интервал может быть установлен достаточно низким, поскольку попытки обновления фактически не будут перезагружаться.
  • Значение "0" будет проверять последнюю измененную временную метку файла при каждом доступе к сообщению. Не используйте это в производственной среде!

Обратите внимание, что в зависимости от вашего ClassLoader, срок действия может работать ненадежно, так как ClassLoader может сохранять кэшированную версию файла комплекта.

В таком сценарии предпочтительнее ReloadableResourceBundleMessageSource, а не ResourceBundleMessageSource, в сочетании с расположением без пути к классу.

Другие вопросы по тегам