阅读:5200回复:0
震惊,他花这些时间就为了干这种事情!
采集模块,在很多系统都有使用,在前段时间出差,做了一个关于采集模块的监测,初次接触到FTP采集和Windows共享采集,而且在查看源代码中,发现两者代码逻辑写的各有千秋,很难复用监控代码块,但我实际发现,两者其实是有联系的,所以我整理了一下,按模板模式重构了采集模块,其中引用了前辈代码。如下:
UC:来我UC震惊部报道吧。。。 时间就是在我应该做采集监控,但是采集模块没有多少联系,重构了这一块,这不是时间嘛。。。经理催也没有用啊。/微笑 注意:参数类我统一整理为String params 可按个人需要自行更改。 1、抽象整理Ftp采集和Windos采集模块流程 public abstract class FileDownAbstractTemplate{ //初始化一些map信息 public abstract void initMapInfomation(String params) throws Exception; //初始化连接对象 public abstract void initConnectObject(String params) throws Exception; //开始执行任务 public abstract Map<String, Object> start(String params) throws Exception; //前后事件 public abstract void MyIReaderBefore(ReaderFile file,String params); //后置事件 public void MyIReaderAfter(String params){ //采集完成后做什么事情 System.out.println(params); } //初始化连接配置信息 public FileConfig initFileConfig(String params) { System.out.println(params); return new FileConfig(); } } 2、以下是一些基础类 a、ReaderFile 文件类 public class ReaderFile { //一些需要的文件信息,进行自行的包装就可以。 } b、FileConfig采集配置类 public class FileConfig { //一些配置信息,个人需求,从数据库中拿到数据进行包装 } c、IReader 是对ReaderFile文件流程管理 public interface IReader { void beforeRead(ReaderFile file); void afterComplete(); } 3、实现文件的采集 以下以FTP采集举列子 public class FtpDownload extends FileDownAbstractTemplate { private FtpUtil ftpUtil; public void initMapInfomation(String params) throws Exception { System.out.println(params); } public void initConnectObject(String params) throws Exception { ftpUtil = new FtpUtil(params); } public Map<String, Object> start(String params) throws Exception { initMapInfomation("1、初始化一些基础的数据,包装到map中"); initConnectObject("2、初始化连接Ftp对象"); ftpUtil.read(MyIReader("开始对文件的操作")); return null; } private IReader MyIReader(String params){ return new IReader() { public void beforeRead(ReaderFile file) { MyIReaderBefore(file, "6、文件下载"); } public void afterComplete() { FtpDownload .super.MyIReaderAfter("7、文件下载完成,进行一些信息的操作"); } }; } public void MyIReaderBefore(ReaderFile file, String params) { System.out.println(params); } } 编写Ftp工具类,主要用于初始化信息,以便于获取文件,包装文件。 public class FtpUtil { public FtpUtil(String params){ System.out.println(params); } public void read(IReader reader) throws Exception { initFtpClient("3、初始化FTP连接流完成"); readFile(reader,"4、读取文件信息"); reader.afterComplete(); closeFtpClient("8、关闭了FTP连接流。"); } private void initFtpClient(String params){ //初始化信息后返回 System.out.println(params); } private void readFile(IReader reader,String params){ System.out.println(params); packRead(reader,"5、将读取的文件包装到IReader中"); } private void packRead(IReader reader,String params){ System.out.println(params); reader.beforeRead(new ReaderFile()); } private void closeFtpClient(String params){ System.out.println(params); } } 4、测试FTP采集流程 public class Test { public static void main(String[] args) throws Exception{ new FtpDownload().start(";Ftp文件开始";); } } 以下是输出结果 1、初始化一些基础的数据,包装到map中 2、初始化连接Ftp对象 3、初始化FTP连接流完成 4、读取文件信息 5、将读取的文件包装到Reder中 6、文件下载 7、文件下载完成,进行一些信息的操作 8、关闭了FTP连接流。 Process finished with exit code 0 [申利民于2019-07-30 14:52编辑了帖子]
|
|