首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

文件监听之WatchService浅析

简介 WatchService是jdk7之后nio包中的新功能。可以看作是文件监控器,通过操作系统原生文件系统来运行。 针对单点多appkey的情况,可以注册开启多个监控器。...应用场景 1、感知系统配置文件的变化,修改配置文件内容即时生效,无需重启服务器 2、监控磁盘中的文件变化 用watchservice修改配置文件方式仅适合于比较小的项目,例如只有一两台服务器,而且配置文件是可以直接修改的...动态修改配置即时生效实现方法 1、WatchService 实例化 watchService = FileSystems.getDefault().newWatchService(); 2、使用 Path...watchService; public WatcherHookThead(WatchService watchService) { super(); this.watchService...= watchService; } @Override public void run() { try { watchService.close

1.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

监听文件修改的四种方法

WatchService WatchService 是利用本机操作系统的文件系统来实现监控文件目录(监控目录),于 JDK1.7 引入的位于 NIO 包下的新机制,所以使用方式和 NIO 也很相似 JDK...自带的 watchService 的缺点是修改文件会触发两次事件,因操作系统有不同情况: 修改了文件的 meta 信息和日期 写时复制效果,即旧文件改名,并将内容复制到新建的文件里 watchService...(watchService, StandardWatchEventKinds.ENTRY_MODIFY); // 监听 while (true) {...// 获取监听到的事件 key WatchKey watchKey = watchService.poll(3 * 1000, TimeUnit.MILLISECONDS);...Hutool(推荐) Hutool 是国人维护的工具集,使用别人的轮子,总比自己重复造轮子高效(但也要了解轮子的设计思路),hutool 底层还是使用 WatchService ,其解决了修改文件会触发两次事件

69310

并发编程 - 利用Event Bus模式实现目录文件变化捕捉

Pre 并发编程 - Event Bus 设计模式 ---- 需求 JDK自1.7版本后提供了WatchService类,该类可以基于事件通知的方式监控文件或者目录的任何变化,文件的改变相当于每一个事件...(Event)的发生,针对不同的时间执行不同的动作,我们将结合NIO2.0中提供的WatchService和上一篇博文实现的Event Bus实现文件目录的监控的功能。...: show me the code , change the world */ @Slf4j public class DirectoryTargetMonitor { private WatchService...watchService; private final EventBus eventBus; private final Path path; private volatile...\n", path); } } 在创建WatchService之后将文件的修改、删除、创建等注册给了WatchService,在指定目录下发生诸如此类的事件之后便会收到通知,将事件类型和发生变化的文件

14520

太极限了,JDK的这个BUG都能被我踩到!

这也能被我们碰到,真是有点极限~ WatchService—JDK内置的文件变更监听 当了解到之前的实现存在BUG后,我就去搜了一下Java下如何监听文件变更,果然被我找到了WatchService。...说是WatchService可以监听一个目录,对目录下的文件新增、变更、删除进行监听。...watchService = FileSystems.getDefault().newWatchService()) { path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE...源码 >>> 1652076266609 - 1652076257097 9512 WatchService原理 WatchService watchService = FileSystems.getDefault...可能你要问了,为什么不用WatchService呢? 我也问了负责人,据说inotify在docker上运行的不是很好,经常会丢失事件,不是Java的问题,所有语言都存在这个问题,所以一直没有使用。

15810

Java Review - 使用Event Bus实现目录变化的监控

有问题啊 , 比如在采集时间间隔内,文件发生了N次变化,只能获取到最后一次,其根本原因是文件的变化不会通知到应用程序, 我只能傻傻的轮询~ 新思路: JDK自1.7版本后提供了WatchService类...,该类可以基于事件通知的方式监控文件或者目录的任何变化,文件的改变相当于每一个事件(Event)的发生,针对不同的时间执行不同的动作,结合NIO2.0中提供的WatchService和Event Bus...watchService; private final EventBus eventBus; private final Path path; private volatile...= FileSystems.getDefault().newWatchService(); //为路径注册感兴趣的事件 this.path.register(watchService...\n", path); } } 在创建WatchService之后将文件的修改、删除、创建等注册给了WatchService,在指定目录下发生诸如此类的事件之后便会收到通知,我们将事件类型和发生变化的文件

42110

Java 项目中一种简单的动态修改配置即时生效的方式 WatchService

WatchService 方式 Java 提供了 WatchService 接口,这个接口是利用操作系统本身的文件监控器对目录和文件进行监控,当被监控对象发生变化时,会有信号通知,从而可以高效的发现变化...这种方式大致的原理:先根据操作系统 new 一个监控器( WatchService ),然后选择要监控的配置文件所在目录或文件,然后订阅要监控的事件,例如创建、删除、编辑,最后向被监控位置注册这个监控器...private static final Logger logger = LoggerFactory.getLogger(ConfigWatcher.class); private static WatchService...watchService; @PostConstruct public void init() { logger.info("启动配置文件监控器");...} } } } 代码非常简单,一看就懂,在项目启动的时候,用 FileSystems.getDefault().newWatchService() 创建一个 WatchService

2K50

太极限了,JDK的这个BUG都能被我踩到

这也能被我们碰到,真是有点极限~ WatchService—JDK内置的文件变更监听 当了解到之前的实现存在BUG后,我就去搜了一下Java下如何监听文件变更,果然被我找到了WatchService。...[p5.png] 说是WatchService可以监听一个目录,对目录下的文件新增、变更、删除进行监听。...watchService = FileSystems.getDefault().newWatchService()) { path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE...源码 >>> 1652076266609 - 1652076257097 9512 WatchService原理 WatchService watchService = FileSystems.getDefault...可能你要问了,为什么不用WatchService呢? 我也问了负责人,据说inotify在docker上运行的不是很好,经常会丢失事件,不是Java的问题,所有语言都存在这个问题,所以一直没有使用。

39441

Java实现监听文件变化的三种方法,推荐第三种

方案二:WatchService 在Java 7中新增了java.nio.file.WatchService,通过它可以实现文件变动的监听。...WatchService是基于操作系统的文件系统监控器,可以监控系统所有文件的变化,无需遍历、无需比较,是一种基于信号收发的监控,效率高。...,它是对操作系统的文件监视器的封装,相对之前,不需要遍历文件目录,效率要高很多 WatchService watcher = FileSystems.getDefault().newWatchService...一个特殊的Event,表示Event被放弃或者丢失 如果查看WatchService实现类(PollingWatchService)的源码,会发现,本质上就是开启了一个独立的线程来监控文件的变化:...如果你编写一个demo,进行验证时,会很明显的感觉到WatchService监控文件的变化并不是实时的,有时候要等几秒才监听到文件的变化。

4K41

Java7 新特性 —— java.nio.file 文件操作

可以设置一个进程对目录中的更改做出响应,一个 WatchService 对象可以通过 FileSystem 生成 在下面这个例子中,delTxtFiles() 作为一个单独的任务执行,该任务将遍历整个目录并删除以....txt 结尾的所有文件,WatchService 会对文件的删除做出反应: Path test = Paths.get("test"); // 要监视的文件 Files.createFile(test.resolve...("Hello.txt")); // 生成WatchService对象 WatchService watcher = FileSystems.getDefault().newWatchService()...只会监视给定的目录,并不包含其下的所有子目录,所有本例中如果 test 下的子目录还有其他 .txt 结尾的文件,并不会触发 WatchService。...要想监视整个子目录,必须在每个子目录放置一个 WatchService 文件查找与读写 我们可以通过在 FileSystem 对象上调用 getPathMatcher() 获得一个 PathMatcher

90830
领券