转载文章,转载自,公司项目,董亚杰写的。

下面是完整的代码,复制的。

package cn.digitalpublishing.util.debug;import java.io.File;
import java.nio.file.FileSystems;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchEvent.Kind;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;import org.apache.commons.io.FilenameUtils;import cn.digitalpublishing.util.SpringUtils;import com.ingenta.framework.dao.impl.support.DefaultIngentaDao;/*** * @author dongyajie**/
@WebServlet(initParams = { @WebInitParam(name = "path", value = "W:\\workspace2\\Editorial\\src\\main\\resources\\sql") }, value = "/DynamicReloadHqlXmlNew", loadOnStartup = 88)
public class DynamicReloadHqlXmlNew extends HttpServlet {private static final long serialVersionUID = 1L;private final String ACTION_ENTRY_CREATE = "ENTRY_CREATE";private final String ACTION_ENTRY_DELETE = "ENTRY_DELETE";private final String ACTION_ENTRY_MODIFY = "ENTRY_MODIFY";private String prevFileName = "";private String prevAction = "";private long prevTimeMillis = 0;private final long interval = 500;private DefaultIngentaDao dao;@Overridepublic void init(ServletConfig config) throws ServletException {final String hqlDir = config.getInitParameter("path");dao = (DefaultIngentaDao) SpringUtils.getBean("ingentaDao");ExecutorService service = Executors.newSingleThreadExecutor();service.execute(new Runnable() {@Overridepublic void run() {WatchService watchService = null;try {watchService = FileSystems.getDefault().newWatchService();Paths.get(hqlDir).register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);} catch (Exception e) {}if (watchService != null) {while (true) {try {WatchKey key = watchService.take();List<WatchEvent<?>> events = key.pollEvents();if (!events.isEmpty()) {WatchEvent<?> event = events.get(events.size() - 1);File eventFile = new File(hqlDir, event.context().toString());Kind<?> eventKind = event.kind();String kindName = eventKind.name();if (eventKind.name().equals(ACTION_ENTRY_CREATE)) {kindName = ACTION_ENTRY_MODIFY;}if ((!eventFile.getPath().equals(prevFileName) || !kindName.equals(prevAction)) || ((System.currentTimeMillis() - prevTimeMillis) > interval)) {if (eventFile.isFile()) {if (kindName.equals(ACTION_ENTRY_MODIFY)) {if (FilenameUtils.isExtension(eventFile.getName().toLowerCase(), "xml")) {loadXML(eventFile.getPath());}}}if (kindName.equals(ACTION_ENTRY_DELETE)) {}prevAction = kindName;prevFileName = eventFile.getPath();prevTimeMillis = System.currentTimeMillis();}}if (!key.reset()) {break;}} catch (Exception e) {}}}}});service.shutdown();}private synchronized void loadXML(String filename) {String logfn = FilenameUtils.getName(filename);try {dao.loadResource(new File(filename));System.err.println(logfn + " 加载完成");} catch (Exception e) {System.err.println(logfn + " 加载失败" + e.getMessage());}}
}

反正,暂时我是看不懂,感觉太高端了,总有一天我有看懂的时候,,,,,

大神,工作经验5年,编程经验,10年,90后。

监听文件修改,自动加载xml文件。相关推荐

  1. Android动态加载XML文件及控件来简单实现QQ好友印象的功能

    在android开发中,我们常常会遇到界面布局控件不确定的情况.由于某些功能的原因或者为了体现某些app的特色等这些原因会导致我们在实现界面布局时需要动态去加载一些控件,那么下面就来介绍一下如何用动态 ...

  2. Spring加载xml文件错误异常:Offending resource: class path resource [spring-context.xml];

    很少写单纯的java工程,在运行的时候,加载xml文件的时候报错,在此记录错误信息,备自己以后查阅,错误信息如下: Java HotSpot(TM) 64-Bit Server VM warning: ...

  3. php源码自动识别文本中的链接,自动加载识别文件Auto.php

    用于本应用的控制器自动加载类设置,用法如同\CodeIgniter\Config\AutoloadConfig 自动加载识别文件:dayrui/App/应用目录/Config/Auto.php 语法格 ...

  4. 解决dom4j加载xml文件性能慢的问题

    解决dom4j加载xml文件性能慢的问题 参考文章: (1)解决dom4j加载xml文件性能慢的问题 (2)https://www.cnblogs.com/wulm/p/9863104.html 备忘 ...

  5. 图片在xml文件中直接加载.9文件

    图片在xml文件中直接加载.9文件,可能会因为图片压缩的缘故产生锯齿,如果使用 ImageView imageview = (ImageView) view .findViewById(R.id.in ...

  6. android xml 加载错误提示,加载uixml文件失败 打开wps时显示“加载XML文件失败1

    打开wps时显示"加载XML文件失败." 打开wps时显示"加载XML文件失败1 关闭所有打开的Word文档: 开始 → 运行 → 粘贴上面复制的命令 → 确定. 在打开 ...

  7. IDEA 加载xml文件失败,解决方案

    问题 在IDEA中,第在src/main路径下添加了xml,使用如下代码加载xml文件时: String path = JsoupDemo.class.getClassLoader().getReso ...

  8. AutoCAD自动加载ARX文件

    AutoCAD自动加载ARX文件 我们以格式刷(matchprop)命令为例教大家如何解决这种问题 1.首先找到AUTOCAD根目录下面的Acad.lsp这个文件,然后在适当的位置加上如下代码: (l ...

  9. 编写acad.rx文件自动加载arx文件

    加载.arx文件,最方便的方法便是,在acad.rx 文件中填写.arx文件的路径,这样点击按F5调试ObjectArx程序时,就会直接启动AutoCAD2002并自动加载.arx文件,再在CAD的命 ...

最新文章

  1. 比特币和加密货币入门
  2. 诗人般的机器学习,ML工作原理大揭秘
  3. 服务器硬件和算力,硬件科普Filecoin运维交付之业务部署
  4. java中process方法用处_Java中ProcessBuilder应用实例
  5. Linux学习之VirtualBox安装Linux
  6. python字典是什么的集合_Python中的字典和集合
  7. 孙子和外孙就是不一样吗?
  8. 微信的APP支付开发,服务端和支付端的问题
  9. 怎么用计算机解锁手机密码华为,华为手机忘记解锁密码如何解锁?两招轻松搞定...
  10. C/C++在线IDE
  11. GHD官宣全新中国区焕发大使乔欣
  12. 怎么起一个好听的商务邮箱名字?
  13. MATLAB与高等数学--极限计算
  14. I2C总线时序以及ACK和NACK(NAK),SCL被从机拉低?
  15. 淘宝/天猫获得店铺的所有商品、店铺列表接口API返回值说明
  16. 闲人闲谈PS之三十一——新收入准则中的合同损失计提
  17. InternalEror :Dst tensor is not initialized
  18. Go语言map的并发操作
  19. 电话接入系统的服务器设置,Skype for Business Server 中本地 PSTN 连接的计划电话系统...
  20. 蓝牙 - 苹果iOS所支持的profile

热门文章

  1. ma应用、超级短线、分钟短线买卖和看盘心得
  2. 你了解欧拉回路吗?(附Java实现代码)
  3. Python Matplotlib 中文显示参数设置
  4. 评审不给钱,看论文还要涨价?UCLA:我们决定抵制柳叶刀、细胞
  5. Python 学习笔记 - socket(基本原理和流程)
  6. HDU 4391 Paint The Wall 段树(水
  7. ORACLE DataGuard主备切换
  8. SharePoint 2013 Designer系列之数据视图筛选
  9. html form表单提交数据并后台获取
  10. 构件图(Component Diagram)