如何在程序里动态加载配置文件
来源:互联网 发布:java行业前景怎么样 编辑:程序博客网 时间:2024/04/28 01:33
flume的sink进程或者kafka的consumer进程,特定的时候需要读取配置文件,如提取指定的字段或过滤指定字段等。这种情况,若没有动态加载,则需要需改代码或配置文件,重启进程方能生效,十分不利于维护。最好的办法是让进程去监控配置文件的改动,然后动态的去读取其中的内容并应用到进程中去,从而达到动态修改。
方案就是启动一个单独线程去监控配置文件的最后修改时间,若发现有改动则重新加载。
代码如下:
public class ReloadThread extends Thread { private static final Logger log = LoggerFactory.getLogger(ReloadThread.class); private long lastSuccessfulReload; private File configureFile; public List<String> selectedFields; public ReloadThread(File configureFile) { this.configureFile = configureFile; selectedFields = new ArrayList<String>(); } public String getSelectedFields() { StringBuilder sb = new StringBuilder(); for (String item : selectedFields) { sb.append(item).append(","); } if (sb.length() > 0) { return (sb.substring(0, sb.length() - 1)); } else { return ""; } } @Override public void run() { while (true) { long time = System.currentTimeMillis(); long lastModified = configureFile.lastModified(); if (lastModified > lastSuccessfulReload && time > lastModified + KafkaUtil.ALLOC_RELOAD_WAIT_MS) { try { synchronized (selectedFields) { reloadConfigureFile(configureFile); log.info("Reload configuration file: " + getSelectedFields()); lastSuccessfulReload = System.currentTimeMillis(); } } catch (Exception ex) { log.error( "Failed to reload config file - will use existing configuration.", ex); } } } } public void reloadConfigureFile(File configureFile) { try { /** 判断文件是否存在 */ if (configureFile.isFile() && configureFile.exists()) { InputStreamReader read = new InputStreamReader( new FileInputStream(configureFile)); BufferedReader bufferedReader = new BufferedReader(read); String line; while ((line = bufferedReader.readLine()) != null) { if (!selectedFields.contains(line)) { selectedFields.add(line); } } read.close(); } else { log.error("Failed to find file:" + configureFile.getAbsolutePath()); } } catch (Exception e) { log.error("Failed to read file:" + configureFile.getAbsolutePath(), e); } }}
0 0
- 如何在程序里动态加载配置文件
- 在程序里修改配置文件
- 在程序里修改配置文件
- 如何在程序里动态更改app中的icon
- 010在网页里动态加载JavaScript
- 在网页里动态加载js
- 在网页里动态加载 js
- 在程序里设置加载网页
- 如何在UITableView里动态添加 cell
- java动态加载配置文件
- Spring动态加载配置文件
- java动态加载配置文件
- 【spring】动态加载配置文件
- 动态加载配置文件实践
- Java动态加载配置文件
- 在Flex程序中动态加载模块
- 在程序中动态加载so文件
- 如何在托管程序中动态加载dll并且调用其中的函数
- JS设置cookie,删除cookie
- SM Java实现
- ubuntu 安装mysql
- paint画笔style为Stroke时circle的半径分析
- lkmusic项目之(基础函数搭建一)
- 如何在程序里动态加载配置文件
- Oracle ORA-01033: 错误解决办法
- tomcat下设置jvm的相关参数
- Swift的数组
- ButterKnife的简单使用
- [python]爬极客网课程
- 观察者模式
- 红糖水与白糖水的交换
- android:stateNotNeeded