3

ResourceBundleMessageSource 消息在 Spring 的配置文件中配置为

<bean id="messageSource"
  class="org.springframework.context.support.ResourceBundleMessageSource"
  p:basenames="WEB-INF/strings/appstrings" />

每当我更改该属性文件中的任何消息时,我都必须重新启动服务器。

我想在我的应用程序中以编程方式阅读这些更新的消息,而无需重新启动服务器。

如何@Controller在运行时的应用程序之一中以编程方式阅读这些消息。

4

2 回答 2

3

春天有一个 ReloadableResourceBundleMessageSource (http://static.springsource.org/spring/docs/3.2.x/javadoc-api/org/springframework/context/support/ReloadableResourceBundleMessageSource.html)应该做你想做的事。

您可以在 stackoverflow 上找到更多信息:

于 2013-01-01T10:04:54.363 回答
0

在 applicationContext.xml 文件中定义您的 ResourceBundle 属性,例如:

<!-- Message Source for appstrings -->
<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="WEB-INF/strings/appstrings" />

</bean>

在您的 Java 类/控制器中,将其自动连接为:

私有 ReloadableResourceBundleMessageSource 消息源;

  @Autowired
  public void setMessageSource(MessageSource messageSource) {
    this.messageSource = (ReloadableResourceBundleMessageSource) ((DelegatingMessageSource) messageSource).getParentMessageSource();
  }

然后在该类/控制器的任何函数中调用 clearCache()。

messageSource.clearCache();

我在控制器中遇到了这个异常

ReloadableResourceBundleMessageSource incompatible with org.springframework.context.support.DelegatingMessageSource

当您尝试通过控制器中的 messageSource 运行它时,您什么都没有,空字符串。如果你仔细观察,你会发现你的 messageSource 属性中有一个 DelegatingMessageSource,它的父源为空,这意味着它是 EMPTY,即总是返回空白。

这是这个小挑战的解决方案:将你的 messageSource 定义从 spring-servlet.xml 移动到 applicationContext.xml!

阅读更多..

于 2013-01-01T11:33:57.510 回答