申利民
骑士
骑士
  • UID582
  • 粉丝0
  • 关注0
  • 发帖数11
阅读:5200回复:0

震惊,他花这些时间就为了干这种事情!

楼主#
更多 发布于:2019-07-29 11:02
采集模块,在很多系统都有使用,在前段时间出差,做了一个关于采集模块的监测,初次接触到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编辑了帖子]
游客

返回顶部