gpt4 book ai didi

java - 在Spring中加载ResourceBundle对象

转载 作者:行者123 更新时间:2023-12-01 05:32:09 25 4
gpt4 key购买 nike

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

这里的原因是我需要将 ResourceBundle 对象作为参数提供给 JasperReports 才能正确编译报告。 JasperReports 使用参数“REPORT_RESOURCE_BUNDLE”通过 str() 函数或 $R{} 表达式绑定(bind)来处理报告中的国际化。此参数唯一接受的类型是 ResourceBundle 对象,因此是我的情况。

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

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

@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_messages”ResourceBundle 对象许多部署回来,因为明显的键值更改在已部署的应用程序中似乎从未发生更改。/p>

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

核心模块打包为 JAR,它是打包为 JBoss 部署的 WAR 的前端模块的依赖项。

具有加载诸如上述方法中的ResourceBundle之类的服务的代码位于Core模块中。最后的 WAR 是前端模块之一,它尝试解析其 WEB-INF/classes/.. 类路径中的文件。

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

最佳答案

Spring 中的 MessageSourceResourceBundle 类是 ResourceBundle 的实现,它使用 MessageSource 来提供其属性。它可以使用 MessageSource 对象 (Autowired) 和 Locale 进行实例化。 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
}

关于java - 在Spring中加载ResourceBundle对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8811995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com