0

我正在尝试在运行时重新加载资源包。在我的应用程序中,登录后,我得到了调用的属性<f:loadBundle basename="messages" var="msg" />。调用是在我的应用程序基础模板中进行的,一切正常。属性文件位于 MyApp/resources/

下一步是尝试更新从我的 userHome/resources 中的属性文件读取的 resourceBundle。我正在调用我的托管 bean 是:

File file = new File(System.getProperty("user.home")+ "/resources/");
    URL[] urls = {file.toURI().toURL()};
    ClassLoader loader = new URLClassLoader(urls);

    ResourceBundle.clearCache(Thread.currentThread().getContextClassLoader());  
    ResourceBundle.clearCache();
    bundle = ResourceBundle.getBundle("messages",Locale.ENGLISH, loader);

我没有错误,并且边界得到了正确的值,但是我的应用程序中发生了任何更改。有人可以告诉我如何重新加载包并显示我从外部文件中获得的新值?清除缓存似乎不起作用,我摆脱了 jsf2 的 faces-config.xml 原因......希望有人能提供帮助。

4

1 回答 1

0

您可以使用Apache Commons Configuration来解决此问题,

PropertiesConfiguration propertiesConfig = new PropertiesConfiguration("yourProps.properties");
propertiesConfig.setReloadingStrategy(new FileChangedReloadingStrategy());

为此,您需要使用commons-configuration依赖项/jar。

<dependency>
    <groupId>commons-configuration</groupId>
    <artifactId>commons-configuration</artifactId>
    <version>20041012.002804</version>
</dependency>

您可以在java-doc中找到更多详细信息,

资源: 属性文件的热重载

于 2014-02-14T13:19:58.850 回答