spring 监控指定文件夹内文件变化
背景
项目需求通过更改resources文件夹中的配置文件来动态更改配置,且对时间规格有要求,不能直接通过读文件来判断是否更改配置,所以需要监控该文件夹下文件的变化,有变化再读文件更改配置。
实现方案
通过FileAlterationObserver和FileAlterationMonitor建立文件变化监听器,在observer中添加对应的FileAlterationListenerAdaptation监听器,来在文件发生对应变化时执行相应操作。
实现代码
//moniter类中方法
public void FileMonitor() throws FileNotFoundException {
File rootDir = new File("src/main/resources");
//使用过滤器
//long interval = TimeUnit.SECONDS.toMillis(1);
//创建过滤器
//IOFileFilter directories = FileFilterUtils.and(FileFilterUtils.directoryFileFilter(), HiddenFileFilter.VISIBLE);
//IOFileFilter files = FileFilterUtils.and(FileFilterUtils.fileFileFilter(), FileFilterUtils.suffixFileFilter(".json"));
//IOFileFilter filter = FileFilterUtils.or(directories, files);
//FileAlterationObserver observer = new FileAlterationObserver (rootDir, filter);
//不使用过滤器
FileAlterationObserver observer = new FileAlterationObserver(rootDir);
observer.addListener(new FileListener());
FileAlterationMonitor monitor = new FileAlterationMonitor();
monitor.addObserver(observer);
try {
monitor.start();
} catch (Exception e) {
log.error("init file monitor error");
}
}
//FileListener类
public class FileListener extends FileAlterationListenerAdaptor {
private String fileName = "test.json";
public void onFileChange(File file) {
log.info("[修改]:" + file.getAbsolutePath());
//对应操作
}
public void onFileCreate(File file) {
}
public void onDirectoryCreate(File directory) {
}
public void onStart(FileAlterationObserver observer) {
super.onStart(observer);
}
public void onStop(FileAlterationObserver observer) {
super.onStop(observer);
}
}