web项目启动时配置监听本地目录文件添加, 删除, 修改, 等操作

Posted darkstreet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web项目启动时配置监听本地目录文件添加, 删除, 修改, 等操作相关的知识,希望对你有一定的参考价值。

大致原理:  通过配置监听器在web容器启动或销毁的时候做相应的操作, 系统目录的监听器使用从jdk1.7才有的WatchService

操作步骤: 1> 自定义自己的监听器实现ServletContextListener接口中的两个方法, 一个未初始化Init方法, 一个是销毁方法Destoryed, 

  由于WatchService为阻塞型方法, 所以需要新建线程防止web容器无法启动

 1 package com.mtl.fill.listener;
 2 
 3 
 4 import com.mtl.fill.utils.ListenFile;
 5 
 6 import javax.servlet.ServletContextEvent;
 7 import javax.servlet.ServletContextListener;
 8 
 9 public class MyListener implements ServletContextListener {
10     @Override
11     public void contextInitialized(ServletContextEvent servletContextEvent) {
12         new Thread(new ListenFile()).start();
13     }
14 
15     @Override
16     public void contextDestroyed(ServletContextEvent servletContextEvent) {
17 
18     }
19 
20 }

 

  2>  写出自己要执行的操作类, 因为用到了多线程, 所以继承Thread或者实现Runable接口

 1 package com.mtl.fill.utils;
 2 
 3 import java.io.*;
 4 import java.nio.file.*;
 5 
 6 public class ListenFile implements Runnable {
 7 
 8     @Override
 9     public void run() {
10         //获取文件系统的WatchService对象
11         WatchService watchService = null;
12         try {
13             watchService = FileSystems.getDefault().newWatchService();
14             //为C:盘根路径注册监听
15             Paths.get("D://scai_client").register(watchService
16                     //监听创建操作
17                     , StandardWatchEventKinds.ENTRY_CREATE
18                     //监听删除操作
19                     ,StandardWatchEventKinds.ENTRY_DELETE
20                     //监听修改操作
21                     ,StandardWatchEventKinds.ENTRY_MODIFY);
22             //死循环一直监听
23             while(true) {
24                 //一直等待,直到获取下一个文件变化事件
25                 WatchKey key = watchService.take();
26                 //遍历监控获得的事件列表
27                 for (WatchEvent<?> event : key.pollEvents()) {
28                     //event.context()返回触发事件的文件或目录
29                     System.out.println(event.context() + "发生了" + event.kind()+ "事件");
30                 }
31                 //重新设置WatchKey
32                 boolean valid = key.reset();
33                 //如果设置失败则退出监听
34                 if (!valid) {
35                     break;
36                 }
37             }
38         } catch (IOException e) {
39             e.printStackTrace();
40         } catch (InterruptedException e) {
41             e.printStackTrace();
42         }
43     }
44 }

,这里directory监听引用了某位博主的博客, 但是找不到了, 所以抱歉无法报明出处了!

 

以上是关于web项目启动时配置监听本地目录文件添加, 删除, 修改, 等操作的主要内容,如果未能解决你的问题,请参考以下文章

java web项目启动时自动加载自定义properties文件

在web项目启动时,使用监听器来执行某个方法

如何在nodejs中启动livereload

eclipse导入web项目,web.xml报错

idea中添加web.xml配置文件与tomcat启动中遇到的web.xml文件找不到的问题

haporxy搭建web群集