我需要在JBoss AS7上運行的已部署WAR的上下文中將我的Spring Web應用程序的i18n本地化屬性作爲ResourceBundle對象加載。在Spring中加載ResourceBundle對象
這裏的原因是我需要將ResourceBundle對象作爲參數提供給JasperReports以正確編譯報告。 JasperReports使用參數「REPORT_RESOURCE_BUNDLE」來處理帶有str()函數或$ R {}表達式綁定的報告中的國際化。此參數唯一接受的類型是ResourceBundle對象,因此是我的情況。
我在某些時候已經開始工作了,但是看起來JBoss堅持了一個陳舊的屬性版本,我認爲這是因爲在做了一個後,它不能再使用未修改的代碼找到ResourceBundle清理,打包並重新部署到項目上。
在春天我們已經配置爲MessageSource豆如下,即能成功地加載和使用屬性文件作爲資源包:
@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;
}
我當前實現獲取資源包對象如下:
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對象,因爲在已部署的應用程序中從未出現明顯的鍵值變化,因此很多部署已返回。
部署的結構化是建立通過行家如下:
核心模塊包作爲JAR即對於被打包成的WAR爲JBoss部署前端模塊的依賴關係。
上述方法中具有加載諸如ResourceBundle之類的東西的代碼位於Core模塊中。最終的WAR是試圖從其WEB-INF/classes/.. classpath解析文件的FrontEnd模塊之一。
我需要訪問哪個類加載器才能從相應的類路徑加載?