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

How to load properties files dynamically when using servlet with war file?

我正在使用 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、区域设置 en_US

的包

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

您还可以考虑将下载的属性写入数据库以更好地促进您的报告。我不太了解你的场景,但这是我首先考虑的方法。

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

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

添加@PostConstruct方法调用私有方法执行初始loadload

添加一种方法以按应用程序要求的方式访问属性。

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

然后可以将此 bean 注入到您想要的任何位置,并将提供 属性 值。来自当前加载的文件。

我终于通过制作模块做到了:)。

感谢:https://developer.jboss.org/thread/219956?tstart=0