【问题标题】:In Java, how to reload dynamically resources bundles in a web application?在 Java 中,如何在 Web 应用程序中动态重新加载资源包?
【发布时间】:2008-10-01 07:34:43
【问题描述】:

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

有没有什么简单的方法可以在不重启网络服务器的情况下使用新值?

(我们确实希望始终从数据库中查找值,但我们希望使缓存无效,例如通过调用特殊的“管理员”URL)

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

【问题讨论】:

  • 如果您不太依赖 ResourceBundle 类本身,那么 Spring 的 MessageSource 抽象提供了一种更灵活的方法,包括缓存和重新加载消息。它可以包装您的自定义 ResourceBundle。如有必要,您可以单独使用那部分 Spring API。
  • 答案可能特定于您正在使用的 Servlet 包含(应用服务器),例如Tomcat 或 JBoss。哪一个?
  • 我们使用 Tomcat 进行开发,但使用 Websphere Application Server 进行生产 (5.X)。

标签: java resources resourcebundle


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    正如其他人在 cmets 中指出的那样,您可能想要研究 Spring - 特别是 ReloadableResourceBundleMessageSource

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 您应该在回答中至少提供部分 lin 作为解释
      • 请点击给定的链接,我希望得到足够的解释。
      • @ilkerkaran 我编辑我的答案并添加一个简短的解释。
      猜你喜欢
      • 2011-05-18
      • 1970-01-01
      • 2013-12-09
      • 1970-01-01
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      相关资源
      最近更新 更多