Java 如何重写标准类或如何实际刷新ResourceBundle?
我正面临一个让我发疯的问题,我希望你能帮助我 场景 我正在开发一个Java应用程序,它使用一个外部库(我无法修改jar),该库使用Java 如何重写标准类或如何实际刷新ResourceBundle?,java,Java,我正面临一个让我发疯的问题,我希望你能帮助我 场景 我正在开发一个Java应用程序,它使用一个外部库(我无法修改jar),该库使用ResourceBundle读取一个属性。ResourceBundle分配给库中一个类内的静态变量。我希望能够动态更改该属性,因此在多次尝试之后,我使用ListResourceBundle实现了该属性列表,因为这是在运行时更改值的最简单方法 应用程序有两个线程: -主线程:这是第一个通过外部库首次加载ResourceBundle。 -子线程:它还使用外部库和加载Res
ResourceBundle
读取一个属性。ResourceBundle
分配给库中一个类内的静态变量。我希望能够动态更改该属性,因此在多次尝试之后,我使用ListResourceBundle
实现了该属性列表,因为这是在运行时更改值的最简单方法
应用程序有两个线程:
-主线程:这是第一个通过外部库首次加载ResourceBundle
。
-子线程:它还使用外部库和加载ResourceBundle
的类
问题
当我更改ListResourceBundle
properties值并调用ResourceBundle.clearCache()
时,它会工作,外部库接受新值
当我尝试从线程执行相同的操作时,问题出现了,我更改了值,clearCache()
,但它使用了主线程的最后一个值,而不是通过子线程指定的值。事实上,如果我从Tread获取属性的值,它将返回新值,尽管外部类使用旧值
我尝试的
- 我尝试使用
指定类加载器,但是clearCache
正在加载AppClassLoader,哪个类加载器是ListResourceBundle
,因此我无法通过它强制null
clearCache
- 我曾尝试在应用程序启动时使用
禁用缓存,但不起作用:ResourceBundleControl
public long gettimeolive(字符串baseName,区域设置){
返回TTL\u DONT\u缓存;
}
备选方案
- 我是否缺少子线程中的
?是否存在完全禁用clearCache
缓存的方法?我只使用一个属性ResourceBundle
- 在Java中,是否可以将标准类用法(
)重定向到自定义类?我还没有发现这方面的任何东西,我认为这应该不难。这样,我就可以强制外部库从我自己的、不是缓存的、也不是基于Java.util.ResourceBundle
的类中读取属性ResourceBundle
ResourceBundle
存储在final
中的字段(库中的字段)?2) 您当前的代码(在多线程环境中不起作用的代码)是什么样子的?