DataX源码

一、源码

二、二次开发

为了满足业务需求,对datax进行了如下改造

一、版本相关

1.修改oracle驱动ojdbc8版本,11.2.0.3 ---》 19.3.0.0
2.修改fasjson版本,1.1.46.sec10 ---》 1.2.60
3.修改io.searchbox.jest-common 和 io.searchbox.jest版本,2.4.0 ---》 6.3.1
4.修改io.searchbox.jest-common 和 io.searchbox.jest版本,2.4.0 ---》 6.3.1
5.修改jar版本,0.0.1-SNAPSHOT.jar ---》1.0.1.jar
6.修改jar版本,1.0.1-SNAPSHOT.jar ---》1.0.2.jar

二、解析配置相关

1.CoreConstant去掉datax.home,
  Configuration.from(new File(path)) ---》 InputStream stream =        ConfigParser.class.getClassLoader().getResourceAsStream(path);Configuration.from(stream);
  JarLoader#doGetURLs()方法 去掉jar包路径必须存在且为目录
  JobContainer#invokeHooks()去掉datax.home
2.Configuration configuration = ConfigParser.parse(jobPath) ---》 Configuration configuration = ConfigParser.parseJson(json);
  增加了Configuration parseJson(final String json){Configuration configuration = SecretUtil.decryptSecretKey(Configuration.from(json));}
  直接从传的json构造配置

三、数据库相关

1.修改mysql分页
   MysqlReader#init(),默认pageSize配置是100000,修改为从配置中取,没有配置才默认100000
2.ESWriter#getDateStr(ElasticSearchColumn esColumn, Column column)  增加column和column.getRowData非空判断,修改es时间格式
3.DBUtil#connect(),以前通过DriverManager.getConnection()获取连接,修改为使用durid连接池,private static ConcurrentHashMap map = new ConcurrentHashMap<>();

四、数据统计相关

1.common添加依赖com.alibaba.transmittable-thread-local
2.Hook#invoke(),增加参数JobStatistics
3.增加DirtyRecordContext,JobStatistics
4.HookInvoker#invokeAll(),去掉其他代码,只保留doInvoke()
5.JobContainer.start(),logStatistics(),增加参数jobStatistics;DirtyRecordContext.clear();this.invokeHooks()放在finaly
6.AbstractTaskPluginCollector#collectDirtyRecord(),有错误信息,LOG.debug("add dirtyRecord {}", DirtyRecordContext.current().add(Pair.of(dirtyRecord, errorMessage)));
7.engine.start(),添加jobStatistics参数(jobId,jobContent)
8.JobContainer#start(),增加jobStatistics.setHasException(hasException);

五、其它优化相关

1.entry(String json) ---》entry(int jobId,String runtimeMode,String json),如果不是 standalone 模式,那么 jobId 一定不能为-1
2.Engein#start(),增加LocalTGCommunicationManager.initCommunication();
   private static Map taskGroupCommunicationMap = new ConcurrentHashMap();
   修改为
   private static final TransmittableThreadLocal> communitcationThrealLocal = new TransmittableThreadLocal<>();
   Engein#start(),增加LocalTGCommunicationManager.clear();
3.增加SessionUtil,两个属性,sessions,currentJobCode
   增加RunState
   Engein#start(),SessionUtil.setState(jobCode, State.RUNNING);SessionUtil.setCurrentJobCode(jobCode);
   统计添加jobStatistics.setErrorMessage(errorMessage);
4.JobContainer#start()  增加LoadUtil.clearConfiguration();
   LoadUtil# 取消private static Configuration pluginRegisterCenter,用后面的替换 private static final TransmittableThreadLocal configuration = new TransmittableThreadLocal<>();
    public static void bind(Configuration pluginConfigs){configuration.set(pluginConfigs);}//设置pluginConfigs,方便后面插件来获取
5.TaskGroupContainer  
   if (state!=null && state.isFinished()) {
      runTasks.forEach(TaskExecutor::shutdown);
      throw DataXException.asDataXException(FrameworkErrorCode.KILLED_EXIT_VALUE, lastTaskGroupContainerCommunication.getThrowable());
   }
6.日志加jobCode StandAloneJobContainerCommunicator
 String currentJobCode = SessionUtil.getCurrentJobCode();
    LOG.info("jobCode:"+currentJobCode+"="+CommunicationTool.Stringify.getSnapshot(communication));
7.Hook添加befor,after方法

你可能感兴趣的:(源码篇,java)