【Java】动态加载配置文件

闲来无事,从公司SVN上拉项目看别人写的代码,遇到一段还算有意思的代码(其实也就是一段简单加载配置文件的代码,主要博主自己没这么写过),摘取如下:

Properties prop = new Properties();
InputStream in = PropertiesTest.class.getClassLoader().getResourceAsStream("/config.properties");
prop.load(in);

从代码本身来看,其实是没有什么大问题的。
主要的问题是采用这种方式来读取配置文件会存在属性文件缓存的问题。可能会有人不太理解。换句话的意思就是说:

  • 当系统在运行中第一次执行这段代码的时候,会将配置文件config.properties的内容保存在系统的缓存当中。
  • 当系统在运行中再次执行这段代码的时候就会从缓存当中读取内容,而不是从配置文件config.properties当中读取内容。

那么假设在系统运行期间,我们去修改配置文件config.properties中的内容,程序执行到上述代码时候,配置文件config.properties中被修改的内容不会立即生效,除非重启系统程序。当然这样的操作就比较的繁琐,尤其是在配置文件内容频繁修改的情况下。所以要让系统动态的加载配置文件是很有必要的。

代码修改

不动手改代码是不可能的,不是博主的作风。
以下是我粗糙修改以后动态加载配置文件的代码:

Properties prop = new Properties();
String path = Thread.currentThread().getContextClassLoader().getResource("config.properties").getPath();
path = URLDecoder.decode(path, "UTF-8");
FileInputStream in = new FileInputStream(path);
prop.load(in);

采用这种方式来获取配置文件的绝对路径,再以流的形式读取配置文件传入,避免了上述配置文件缓存的问题,从而能够实现配置文件的动态加载。即我们在程序运行的过程当中修改配置文件相应的内容,当程序再次执行到这段代码,配置文件中被修改的内容会直接读取生效。

path = URLDecoder.decode(path, "UTF-8");

上述这段代码,是博主后来添加上去的,主要是用来转换文件的路径,避免路径文件名中包含空格引起的问题。不使用上述代码对路径进行转换,所获取的文件路径中有文件名包含空格时,文件名中的空格会被替代为%20,这样直接读取会导致配置文件的路径不匹配,进而系统找不到指定配置文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值