关于property文件的使用

来源:互联网 发布:解压缩工具 for mac 编辑:程序博客网 时间:2024/05/29 18:20

1. 需求说明

需求:
实现实时更新数据

在一些系统中,可能有更改数据的需求.例如,在系统中我们使用了百度统计账号进行定期发送统计数据邮件.依照百度接口的需要,我们需要在功能模块里添加百度统计账号和密码等信息.假如某一天密码泄露,我们因此修改了百度统计账号的密码,而又不想影响线上系统的运行,此时就需要我们手动更新服务器上项目中密码信息.基于不能停止项目运行的需要,就可以采用property文件进行”热插拔”.

2. 实践

在系统中建立xxxx.properties文件,里面存放键值对,每次从文件取值时都从文件中读取一次.简要代码如下:

        Properties properties = new Properties();        InputStream in = TestProperties_baidutongji.class.getClassLoader().getResourceAsStream("com/volcanno/config/baidutongji.properties");        properties.load(in);        System.out.println(properties.getProperty("USERNAME"));

从网上看到一些伙伴说这种无法实现实时更新.经过实验,在我的机器上却实现了实时更新.

第二种方法:

        String dirPath = Thread.currentThread().getContextClassLoader().getResource("").getPath();        File file = new File(dirPath,"com/volcanno/config/baidutongji.properties");        InputStream in = new FileInputStream(file);

这种方法google之后,普遍说是可以实现实时更新,且均作为弥补第一种方法缺陷(指不能实时更新,但我的实验是能够实时更新的.因此应该不能称之为实时更新)的方案.经过实验,的确可以实现实时更新.

3. 路上的坑

我用的开发工具是eclipse,不过发现eclipse似乎不能实时编译文件到classes目录下.之前测试一直不成功的原因就是,在程序运行时,我改动的一直都是src下面的properties文件.但是实际上,程序读取时编译后bin目录下的文件.且你的改动不能实时变化到bin目录下.如果我们在程序运行时改动bin目录下的文件就可以看到变化效果了.

原创粉丝点击