В Java, как динамически перезагрузить пакеты ресурсов в веб-приложении? - PullRequest
8 голосов
/ 01 октября 2008

Мы используем fmt: setBundle для загрузки пакета ресурсов из базы данных (для этого мы расширили класс ResourceBundle). Когда мы изменяем значение в базе данных, мы должны перезагрузить веб-сервер, чтобы отобразить новое значение в веб-приложении.

Есть ли простой способ использовать новое значение без перезапуска веб-сервера?

(Мы не хотим всегда искать значение из базы данных, но мы хотели бы сделать кэш недействительным, например, вызвав специальный URL-адрес admin)

РЕДАКТИРОВАТЬ: Мы используем JDK 1.4, поэтому я бы предпочел решение для этой версии. :)

Ответы [ 3 ]

7 голосов
/ 01 октября 2008

Если вы используете JDK 1.6, вы можете использовать методы обратного вызова getTimeToLive() и needsReload() в ResourceBundle.Control для контроля необходимости загрузки кэша пакета с новыми значениями из базы данных.

3 голосов
/ 01 октября 2008

Как отмечали другие в комментариях, вы можете захотеть взглянуть на Spring - особенно на ReloadableResourceBundleMessageSource .

1 голос
/ 30 апреля 2019

Во-первых, вы можете создать класс, который расширяется от ReloadableResourceBundleMessageSource, чтобы предоставить доступ к его защищенному внутреннему классу, который называется getProperties. Этот метод возвращает параллельную карту из объекта PropertiesHolder. Во-вторых, вы должны сконфигурировать bean-компонент этого расширенного класса в своем классе веб-конфигурации. Теперь вы можете использовать messageSource на вашем сервисном или бизнес-уровне. Вот ссылка Настройка перезагружаемого пакета источника сообщений

...