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);
    }
}
posted @ 2022-04-20 14:57  zjcfrancis  阅读(364)  评论(0编辑  收藏  举报