文件监听-WatchMonitor

    • 支持多级目录的监听(WatchService只支持一级目录),可自定义监听目录深度
    • 延迟合并触发支持(文件变动时可能触发多次modify,支持在某个时间范围内的多次修改事件合并为一个修改事件)
    • 多观察者实现,可以根据业务实现多个Watcher来响应同一个事件(通过WatcherChain)

    在Hutool中,WatchMonitor主要针对JDK7中WatchService做了封装,针对文件和目录的变动(创建、更新、删除)做一个钩子,在Watcher中定义相应的逻辑来应对这些文件的变化。

    在hutool-setting模块,使用WatchMonitor监测配置文件变化,然后自动load到内存中。WatchMonitor的使用可以避免轮询,以事件响应的方式应对文件变化。

    使用

    • ENTRY_MODIFY 文件修改的事件
    • ENTRY_CREATE 文件或目录创建的事件
    • ENTRY_DELETE 文件或目录删除的事件

    下面我们介绍WatchMonitor的使用:

    其实我们不必实现Watcher的所有接口方法,Hutool同时提供了SimpleWatcher类,只需重写对应方法即可。

    createAll方法会创建一个监听所有事件的WatchMonitor,同时在第二个参数中定义Watcher来负责处理这些变动。

    在监听目录或文件时,如果这个文件有修改操作,JDK会多次触发modify方法,为了解决这个问题,我们定义了DelayWatcher,此类通过维护一个Set将短时间内相同文件多次modify的事件合并处理触发,从而避免以上问题。