背景:
我要求向用户显示的消息必须因语言和公司部门而异。因此,我不能使用开箱即用的资源包,所以我实际上是在使用 PropertiesConfiguration 文件编写我自己的资源包版本。
此外,我要求消息必须在生产中动态修改,而无需重新启动。
我正在加载三个不同的属性文件迭代:
-basename_division.properties
-basename_2CharLanguageCode.properties
-basename.properties
这些文件存在于类路径中。此代码将进入一个标记库,供门户中的多个 portlet 使用。
我构建了可能的 .properties 文件,然后尝试通过以下方式加载每个文件:
PropertiesConfiguration configurationProperties;
try {
configurationProperties = new PropertiesConfiguration(propertyFileName);
configurationProperties.setReloadingStrategy(new FileChangedReloadingStrategy());
} catch (ConfigurationException e) {
/* This is ok -- it just means that the specific configuration file doesn't
exist right now, which will often be true. */
return(null);
}
如果它确实成功地找到了一个文件,它会将创建的 PropertiesConfiguration 保存到一个 hashmap 中以供重复使用,然后尝试找到 key。(与常规资源包不同,如果找不到密钥,它会尝试查找更通用的文件以查看该文件中是否存在该密钥 - 因此只需将覆盖异常放入语言/部门特定属性中文件。)
问题:
如果文件在第一次检查时不存在,则会引发预期的异常。但是,如果稍后将文件放入类路径中,然后重新运行此代码,则仍会引发异常。重新启动门户显然可以解决问题,但这对我没有用 - 我需要能够允许他们将新消息放置在适当的位置,以便在没有重新启动的情况下覆盖 language/companyDivision。而且我对为所有可能的部门创建空白文件并不感兴趣,因为有很多部门。
我假设这是一个类加载器问题,因为它第一次确定类路径中不存在该文件,并在尝试重新加载同一文件时缓存该结果。我对使用类加载器做任何太花哨的事情不感兴趣。(我将是唯一能够理解/维护该代码的人。)具体的环境是 WebSphere Portal。
有什么办法可以解决这个问题还是我被卡住了?