Java集成DataX开发

Java集成DataX开发

    • 背景
    • DataX 下载
    • 集成准备
    • 系统集成
    • 总结

背景

最近有个项目需要将其他服务器上个的数据库数据导入到其他数据库中,有个同事推荐使用DataX工具,所以下了个DataX研究了下;发现还需要搭建Python环境,通过python来调用dataX执行任务,但是我的想使用Java启动DataX,在网上百度了,发现现有的博客基本上也是利用java来调用python命令Runtime.getRuntime().exec()来执行。看了云栖社区的博客准备自己也搭建个。
云栖社区博客

DataX 下载

获取dataX工具有2种方法;
1.是通过下载DataX在github上的源码,通过maven编译打包;
2.直接下载编译成功后的包。
如果你要对DataX进行二次开发,建议下载源代码,再进行编译打包。如果是简单的数据同步功能,建议直接下载编译后文件。
DataX源码
DataX 下载地址
dataX 的文件目录如下:
Java集成DataX开发_第1张图片bin:是启动文件,conf:系统配置文件,job:配置同步json文件,lib:各种依赖jar包,log:系统日志,pligin:各种数据库读写操作插件。

集成准备

DataX没有将代码上传到maven服务器上,楼主用的是maven项目,所以只能手动的导入集成。有条件可以自己建立maven私服。
楼主只是将DataX启动程序集成到项目中的,没有将对应的reader和writer的插件集成进来,楼主将源代码简单的改造了下。你可以将lib文件下的依赖jar导入到你的项目中,并不是将所有的都导入进去,更具自己的项目需要。
在这里插入图片描述在这里插入图片描述楼主集成了图上的4个jar,暂时没有出现错误,前3个dataX的包是必须的。
楼主用的是 maven项目,通过maven install 本地jar包的方式集成的,maven install本地jar包的方法,可以百度一下网上例子很多:百度maven install本地jar

系统集成

通过上面的方法你已经将dataX 集成到你的系统了,但是你如何启动dataX呢,在com.alibaba.datax.core.Engine类中有个main(String[])和entry(String[])方法,调用启动。启动代码如下:

public static void start(String dataxPath,String jsonPath) throws Throwable {
        System.setProperty("datax.home", dataxPath);
        System.setProperty("now", new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss:SSS").format(new Date()));// 替换job中的占位符
        //String[] datxArgs = {"-job", dataxPath + "/job/text.json", "-mode", "standalone", "-jobid", "-1"};
        String[] datxArgs = {"-job", jsonPath, "-mode", "standalone", "-jobid", "-1"};
        Engine.entry(datxArgs);
         Engine.getResult();
    }

参数说明,dataxPath 是datax工具的路径,jsonPath 是配置同步数据库json文件的路径,System.setProperty(“datax.home”, dataxPath); 设置datax.home环境变量,在系统启动时会通过datax.home环境变量获取配置文件和read、writer数据量插件。String[] datxArgs = {"-job", jsonPath, “-mode”, “standalone”, “-jobid”, “-1”};定义构造参数数组,在系统启动时会用到。
通过上面的方法就可以通过Java的方式启动DataX,楼主是通过配置Spring定时器的方式,定时调用代码启动DataX服务同步数据,成功后控制台输出如下:
Java集成DataX开发_第2张图片但是有个业务的要求,需要将每次运行的信息保存到数据库表中,提供历史纪录的要求,方便及时查看是否需要修改。楼主本来是想通过读取日志文件的方式获取,但是感觉太麻烦,就下载了源代码研究研究。在com.alibaba.datax.core.job.JobContainer类中找到了控制台打印日志的信息。
Java集成DataX开发_第3张图片所以就改造了源代码,通过将结果存储到Map中,再通过get set方法获取结果。在DataX源码中有个Communication实体类,里面存储了DataX所有的状态及统计信息交互类,job、taskGroup、task等的消息汇报都走该类,有兴趣的可以通过它获取其他的运行信息。

总结

DataX是阿里巴巴推出的开源的离线数据同步工具/平台,所支持的数据库还是挺多的,包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等。本文只是对Java简单集成DataX,没有对DataX深度的开发,对DataX运行的机制还不是特别的了解,望大神勿喷,有兴趣的朋友可以找阿里巴巴Github官网查看。

你可能感兴趣的:(Java集成DataX开发)