将warlet与war文件一起使用时如何动态加载属性文件?

时间:2015-05-19 12:46:20

标签: java properties jboss resources war

我正在使用JBoss AS 7。

如何使用我从外部文件夹每次下载(带翻译)的属性文件?

我将servlet部署为.WAR文件,我想从磁盘的随机临时文件夹中使用这些属性文件。我怎么样?

问题是这些属性必须在类路径中。

稍后编辑:

            File file = new File(tempDir);
            java.net.URL[] urls = {file.toURI().toURL()};
            ClassLoader loader = new URLClassLoader(urls);
            ResourceBundle.getBundle("XXXXXX" + ReportLocale + ".properties", Locale.getDefault(), loader);

tempDir是临时文件夹的位置,ReportLocale根据所选语言动态更改。但是,这根本不起作用,我得到java.util.MissingResourceException:找不到基本名称XXXXXXX.properties的捆绑包,locale en_US

3 个答案:

答案 0 :(得分:0)

考虑将.properties文件与.WAR部署工件分开。 .WAR文件实际上是一个不可变的工件,如果应用服务器允许您更改它,我会感到惊讶。即便如此,这可能也不是一个好主意。

您也可以考虑将下载的属性写入数据库,以便更好地进行报告。我对你的情况了解不多,但这是我首先考虑的方法。

答案 1 :(得分:0)

您可以使用同步私有方法创建一个@Singleton ejb,该方法从已配置的位置加载属性

定期(例如每5分钟)使用@Schedule添加一个调用私有方法的方法。

添加一个@PostConstruct方法,该方法调用私有方法来执行初始加载。

添加一种方法,以应用程序所需的方式访问属性。

在将新属性对象分配给字段之前,您可能应该每次都将属性加载到新对象中。这将避免在加载时来自应用程序的调用将读取属性对象的可能性。

然后可以在任何地方注入此bean,并提供属性值。从当前加载的文件。

答案 2 :(得分:0)

我终于做了一个模块:)。

致记:https://developer.jboss.org/thread/219956?tstart=0