在Java中,如何在Web应用程序中动态重新加载资源包?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Java中,如何在Web应用程序中动态重新加载资源包?相关的知识,希望对你有一定的参考价值。

我们使用fmt:setBundle从数据库加载资源包(我们扩展了ResourceBundle类来做到这一点)。当我们修改数据库中的值时,我们必须重新加载Web服务器以在Web应用程序上显示新值。

是否有任何简单的方法可以在不重新启动Web服务器的情况下使用新值?

(我们不想总是从数据库中查找值,但我们希望使缓存无效,例如通过调用特殊的“admin”URL)

编辑:我们正在使用JDK 1.4,所以我更喜欢该版本的解决方案。 :)

答案

正如其他人在评论中指出的那样,你可能想看看Spring--尤其是ReloadableResourceBundleMessageSource

另一答案

如果您正在使用JDK 1.6,则可以使用getTimeToLive()中的回调方法needsReload()ResourceBundle.Control来控制是否需要使用数据库中的新值加载包缓存。

另一答案

首先,您可以创建一个从ReloadableResourceBundleMessageSource扩展的类,以显示名为getProperties的内部类保护方法。此方法从PropertiesHolder对象返回并发映射。其次,您应该在Web配置类中配置该扩展类的bean。现在,您可以在服务或业务层中使用messageSource。这是参考链接Configure reloadable message source bundle

以上是关于在Java中,如何在Web应用程序中动态重新加载资源包?的主要内容,如果未能解决你的问题,请参考以下文章

Java_动态重新加载Class机制

如何在不重新编译的情况下在 .NET 中动态切换 Web 服务地址?

如何在模块化的 java 11 应用程序中动态加载 Libreoffice jar,而不从自定义类加载器中获取 ClassCastException

如何在烧瓶中重新加载python模块?

如何在 Java Web 应用程序中动态设置会话超时?

死磕Tomcat系列——Tomcat如何做到热加载和热部署的