Java 在Spring中加载ResourceBundle对象

Java 在Spring中加载ResourceBundle对象,java,spring,jboss,jasper-reports,resourcebundle,Java,Spring,Jboss,Jasper Reports,Resourcebundle,我需要将SpringWeb应用程序的i18n本地化属性作为ResourceBundle对象加载到运行在JBossAS7上的已部署WAR的上下文中 这里的原因是我需要输入ResourceBundle对象作为JasperReports的参数,以正确编译报告。JasperReports使用参数REPORT_RESOURCE_BUNDLE在报告中使用str函数或$R{}表达式绑定处理国际化。此参数唯一可接受的类型是ResourceBundle对象,因此我的情况是 我让它在某个时候工作,但JBoss似乎保

我需要将SpringWeb应用程序的i18n本地化属性作为ResourceBundle对象加载到运行在JBossAS7上的已部署WAR的上下文中

这里的原因是我需要输入ResourceBundle对象作为JasperReports的参数,以正确编译报告。JasperReports使用参数REPORT_RESOURCE_BUNDLE在报告中使用str函数或$R{}表达式绑定处理国际化。此参数唯一可接受的类型是ResourceBundle对象,因此我的情况是

我让它在某个时候工作,但JBoss似乎保留了一个过时的属性版本,我相信这一点可以通过以下事实得到澄清:在我对项目进行了清理、打包和重新部署之后,它无法再使用未修改的代码定位ResourceBundle

在Spring中,我们配置了一个MessageSourcebean,如下所示,它能够成功地将属性文件作为资源包加载和使用:

@Bean 
public MessageSource messageSource() {
  ReloadableResourceBundleMessageSource ms = new ReloadableResourceBundleMessageSource();
  String[] basenames = {"/WEB-INF/classes/messages/i18n/core_messages",
                        "/WEB-INF/classes/messages/i18n/mui_messages"};
  ms.setBasenames(basenames);
  return ms;
}
我当前获取ResourceBundle对象的实现如下:

public ResourceBundle getBeanResourceBundle() {
  Locale fromConfig = DEFAULT_LOCALE;

  //Resolve Locale from a configuration service

  ClassLoader cl = Thread.currentThread().getContextClassLoader();
  return ResourceBundle.getBundle("core_messages", fromConfig, cl);
}
使用this.getClassLoader加载类时出现问题,在我更改为从Thread.currentThread加载后开始工作。但是现在clean:package:deploy已经使它变得无效,我有合理的信息建议它停止实际加载新的core_消息ResourceBundle对象许多部署,因为在部署的应用程序中明显的键值更改似乎从未改变

部署的结构通过maven构建,如下所示:

public ResourceBundle getBeanResourceBundle() {
  Locale fromConfig = DEFAULT_LOCALE;

  //Resolve Locale from a configuration service

  ClassLoader cl = Thread.currentThread().getContextClassLoader();
  return ResourceBundle.getBundle("core_messages", fromConfig, cl);
}
核心模块打包为JAR,它是打包为JBoss部署的WAR的前端模块的依赖项

核心模块中的代码包含用于加载诸如上述方法中的ResourceBundle之类的内容的服务。最终的WAR是一个前端模块,它试图从其WEB-INF/classes/解析文件。。类路径


我需要访问什么类加载器才能从适当的类路径加载?

Spring中的MessageSourceResourceBundle类是ResourceBundle的一个实现,它使用MessageSource来提供其属性。可以使用自动连接的MessageSource对象和区域设置对其进行实例化。MessageSource已经处理了我在应用程序中需要的东西,我只需要获取一个工作的ResourceBundle,它在Locale中也可以这样做

public ResourceBundle getBeanResourceBundle() {
  Locale fromConfig = DEFAULT_LOCALE;

  //Resolve Locale from a configuration service

  return new MessageSourceResourceBundle(ms, fromNodeConfig); //replace code in my question
}