Java实现动态加载读取properties文件
问题: 当我们使用如下语句加载.properties时:
1 2 3 | ClassLoader classLoader = this .getClass().getClassLoader(); Properties prop = new Properties(); prop.load(classLoader.getResourceAsStream( "/Application.properties" )); |
会发现修改了.properties后,即使重新执行,读入的仍为修改前的参数。此问题的原因在于ClassLoader.getResourceAsStream读入后,会将.properties保存在缓存中,重新执行时会从缓存中读取,而不是再次读取.properties文件。
解决:
1 2 3 | Properties prop = new Properties(); InputStream is = new FileInputStream(绝对路径); prop.load(is); |
此时,FileInputStream不会将.properties保存在缓存中,即可以解决此问题。但另外让人困惑的 一个问题会产生,即绝对路径,会导致程序的通用性不好。这个问题是由于ClassLoader.getResourceAsStream是直接寻找 classes下的文件,FileInputStream则需要用完整的绝对路径。
完美解决:
1 2 3 | Properties prop = new Properties(); String path = Thread.currentThread().getContextClassLoader().getResource( "" ).getPath(); InputStream is = new FileInputStream(path + "/VoucherManagement.properties" ); |
此时已无需给出.properties绝对路径,实现动态加载。
联系方式
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步