项目中用到,记录下,顺便学习。
需求在
1、文件生成成功后需要清除redis里的数据包的临时数据。
2、任务结束时(任务完成、打回、中断时)清除某路径下的文件包。
以上两点是在系统文件检查功能中的需求。首先是把ftp中需要处理的zip包数据放到redis里,然后文件检查,检查完成,中断,打回都清除文件包,更新或删除redis的数据包的数据。
使用java的事件机制去实现此功能。
事件对象
package com.lancy.event;
public class LntEvent extends java.util.EventObject {
public LntEvent(Object source) {
super(source);
}
}
事件监听接口
这里把监听接口定义为抽象类,好处就是不同的监听实现类只需要实现特定的方法。
接口里定义需要监听哪些事件。
package com.lancy.event;
public abstract class LntEventListener implements java.util.EventListener {
public void init(LntEvent le) {
}
public void distributeFile(LntEvent le) {
}
public void createFile(LntEvent le) {
}
public void returnFile(LntEvent le) {
}
public void complete(LntEvent le) {
}
public void interrupt(LntEvent le){
}
}
事件源(事件生产者)
事件源是产生事件的主体。
事件源需要注册事件监听器,所以事件源内需要有相应的盛放事件监听器的容器
package com.lancy.event;
import java.util.Enumeration;
import java.util.UUID;
import java.util.Vector;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.lancy.common.ConfigCommon;
import com.lancy.zookeeper.ZKCrudOperation;
public class LntEventSource {
private static Logger logger = LogManager.getLogger(LntEventSource.class);
private static Vector repository = new Vector();// 监听自己的监听器队列,即存放事件监听器的容器
private String mCode;
private String zipName;
private String fileName;
private String batchNo;
private String genPath;// 文件生成的路径
private String dataType;// 数据类型
private boolean zipRequired;// 是否需要压缩
public LntEventSource(String mCode, String zipName, String batchNo) {
this.mCode = mCode;
this.zipName = zipName;
this.batchNo = batchNo;
}
public LntEventSource(String mCode, String zipName, String fileName, String batchNo) {
this.mCode = mCode;
this.zipName = zipName;
this.fileName = fileName;
this.batchNo = batchNo;
}
public LntEventSource(String mCode, String zipName, String fileName, String batchNo, String dataType) {
this.mCode = mCode;
this.zipName = zipName;
this.fileName = fileName;