文件监听之WatchService浅析

简介

WatchService是jdk7之后nio包中的新功能。可以看作是文件监控器,通过操作系统原生文件系统来运行。 针对单点多appkey的情况,可以注册开启多个监控器。 每个监控器可看作是后台线程,通过监控文件发出的信号来实现监控。

应用场景

1、感知系统配置文件的变化,修改配置文件内容即时生效,无需重启服务器2、监控磁盘中的文件变化

用watchservice修改配置文件方式仅适合于比较小的项目,例如只有一两台服务器,而且配置文件是可以直接修改的。例如 Spring mvc 以 war 包的形式部署,可以直接修改resources 中的配置文件。如果是 Spring boot 项目,还想用这种方式的话,就要引用一个外部可以编辑的文件,比如一个固定的目录,因为 spring boot 大多数以 jar 包部署,打到包里的配置文件没办法直接修改。如果是比较大的项目,最好还是用配置中心,例如携程的 Apollo、Consul 等。

动态修改配置即时生效实现方法

1、WatchService 实例化

2、使用 Path 来指定要监控的目录

3、将 Path 注册到 WatchService

使用Path.register() 方法注册要监控指定目录的那些事件(创建、修改、删除)

StandardWatchEventKinds.ENTRYCREATE //创建StandardWatchEventKinds.ENTRYMODIFY //修改StandardWatchEventKinds.ENTRY_DELETE //删除

4、创建监听配置文件守护线程

使用WatchService监听配置文件所在目录内容的变化,包括修改、删除事件。通过后台线程实现阻塞等待内容变化事件,一旦发现有变更,则重新装载配置文件

核心代码块:

5、注册关闭钩子,当JVM停止时关闭WatchService。

验证动态修改配置是否生效测试

1、测试代码

application.properties

初始内容username=helloworld

不停服务,将username修改为test,观察控制台打印value的值是否动态生效

通过控制台可以说明,value已经动态修改,说明配置文件即时被加载

demo地址

https://github.com/lyb-geek/first-watchserver

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180701G07PW700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券