Java后端
·2024-11-09有没有做完 rpc项目 第二章 全局加载配置 扩展 的鱼友,教教我怎么实现监听配置文件的变更和自动更新呗😀
这是我的代码:
public class ConfigFileWatcher {
private Props props;
public ConfigFileWatcher(String configFileName) throws IOException, URISyntaxException {
//加载配置文件
this.props = new Props(configFileName);
//启动配置文件监听
startConfigFileWatcher(props, configFileName);
}
private static void startConfigFileWatcher(Props props, String filePath) throws URISyntaxException {
//todo 获取资源文件的URL 要适配linux
URL resourceUrl = ConfigFileWatcher.class.getResource("/"+filePath);
if (resourceUrl == null) {
return;
}
// 将URL转换为Path
Path path = null;
try {
path = Paths.get(resourceUrl.toURI()).getParent();
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
if (path == null) {
System.err.println("无法获取资源文件的父目录: " + resourceUrl);
return;
}
// 输出父目录
System.out.println("资源文件的父目录: " + path);
// 创建一个简单的监听器
Watcher watcher = new SimpleWatcher() {
@Override
public void onModify(WatchEvent<?> event, Path currentPath) {
if (currentPath.endsWith(filePath)) {
Console.log("配置文件已修改,重新加载...");
// 重新加载配置文件
props.autoLoad(true);
}
}
};
try{
// 创建并启动监控器
WatchMonitor watchMonitor = WatchMonitor.create(path);
watchMonitor.setWatcher(watcher);
watchMonitor.start();
}catch (Exception e) {
Console.error(e, "无法启动配置文件监听器: {}", path);
}
}
}
在ConfigUtils里
//加载文件
ConfigFileWatcher watcher = new ConfigFileWatcher(application.toString());
return watcher.getProps().toBean(clazz,Prefix);
应该是我理解不够,还是没做出来😜,求各路大佬指点和分享
3
0
分享
操作
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
