我们使用 fmt:setBundle 从数据库加载资源包(我们扩展了 ResourceBundle 类来做到这一点)。当我们修改数据库中的值时,我们必须重新加载 Web 服务器以在 Web 应用程序上显示新值。
是否有任何简单的方法可以在不重新启动 Web 服务器的情况下使用新值?
(我们不想总是从数据库中查找值,但我们想使缓存无效,例如通过调用特殊的“管理员”URL)
编辑:我们使用的是 JDK 1.4,所以我更喜欢那个版本的解决方案。:)
我们使用 fmt:setBundle 从数据库加载资源包(我们扩展了 ResourceBundle 类来做到这一点)。当我们修改数据库中的值时,我们必须重新加载 Web 服务器以在 Web 应用程序上显示新值。
是否有任何简单的方法可以在不重新启动 Web 服务器的情况下使用新值?
(我们不想总是从数据库中查找值,但我们想使缓存无效,例如通过调用特殊的“管理员”URL)
编辑:我们使用的是 JDK 1.4,所以我更喜欢那个版本的解决方案。:)
如果您使用的是 JDK 1.6,您可以使用回调方法getTimeToLive()
和ResourceBundle.ControlneedsReload()
来控制是否需要使用数据库中的新值加载包缓存。
正如其他人在评论中指出的那样,您可能想要研究 Spring - 特别是ReloadableResourceBundleMessageSource。
首先,您可以创建一个扩展自的类,ReloadableResourceBundleMessageSource
以公开其内部类受保护的方法,称为getProperties
. PropertiesHolder
此方法从对象返回一个并发映射。其次,您应该在 Web 配置类中配置该扩展类的 bean。现在您可以在您的服务或业务层中使用 messageSource。这是参考链接配置可重新加载的消息源包