From b4630130cf55cd0038741f86e9929c7df7ae1ae3 Mon Sep 17 00:00:00 2001 From: huzekang <1040080742@qq.com> Date: Tue, 7 May 2019 19:15:38 +0800 Subject: [PATCH] =?UTF-8?q?add:=201.=20=E6=96=B0=E5=A2=9E=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E6=8E=A5=E5=8F=A3=E8=B7=91=E4=B8=80=E4=B8=AAdatax=08?= =?UTF-8?q?=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- core/pom.xml | 5 ++ .../java/com/alibaba/datax/core/Engine.java | 51 +++++++++++++++++-- core/src/test/java/Test.java | 15 ------ .../controller/JobContentController.java | 19 +++++-- 5 files changed, 68 insertions(+), 24 deletions(-) delete mode 100644 core/src/test/java/Test.java diff --git a/README.md b/README.md index 1c312ebe..100c7155 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ jdk1.8 * [x] springboot重构项目 * [x] 通过restful接口调度datax完成抽取数据作业 -* [ ] 通过restful接口传入job配置json生成临时文件,根据文件配置调度datax执行该作业 +* [x] 通过restful接口传入job配置json生成临时文件,根据文件配置调度datax执行该作业 * [ ] 实现datax分布式作业 * [ ] 网页端修改job配置的json * [ ] 网页端实时查看抽取日志 diff --git a/core/pom.xml b/core/pom.xml index 5582d943..abab6fac 100755 --- a/core/pom.xml +++ b/core/pom.xml @@ -23,6 +23,11 @@ + + cn.hutool + hutool-all + 4.5.1 + commons-configuration commons-configuration diff --git a/core/src/main/java/com/alibaba/datax/core/Engine.java b/core/src/main/java/com/alibaba/datax/core/Engine.java index ae420ef0..64aa4874 100755 --- a/core/src/main/java/com/alibaba/datax/core/Engine.java +++ b/core/src/main/java/com/alibaba/datax/core/Engine.java @@ -1,5 +1,6 @@ package com.alibaba.datax.core; +import cn.hutool.core.io.FileUtil; import com.alibaba.datax.common.element.ColumnCast; import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.spi.ErrorCode; @@ -14,14 +15,14 @@ import com.alibaba.datax.core.util.ExceptionTracker; import com.alibaba.datax.core.util.FrameworkErrorCode; import com.alibaba.datax.core.util.container.CoreConstant; import com.alibaba.datax.core.util.container.LoadUtil; -import org.apache.commons.cli.BasicParser; -import org.apache.commons.cli.CommandLine; -import org.apache.commons.cli.DefaultParser; -import org.apache.commons.cli.Options; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; import java.util.Arrays; import java.util.List; import java.util.Set; @@ -231,7 +232,7 @@ public class Engine { * @Date: 2019-05-05 */ - public static void startJob(String jobPath) { + public static void testStartJob(String jobPath) { try { Engine.entry(jobPath); @@ -250,4 +251,44 @@ public class Engine { } } + //todo 都是用同一个文件,是否需要考虑线程安全问题 + public static void startJobByJsonStr(String jobJson) { + String tmpFilePath = "jobTmp.conf"; + // 根据json写入到临时本地文件 + PrintWriter writer = null; + try { + writer = new PrintWriter(tmpFilePath, "UTF-8"); + writer.println(jobJson); + + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } finally { + if (writer != null) { + writer.close(); + } + } + + // 使用临时本地文件启动datax作业 + try { + Engine.entry(tmpFilePath); + } catch (Throwable e) { + LOG.error("\n\n经DataX智能分析,该任务最可能的错误原因是:\n" + ExceptionTracker.trace(e)); + + if (e instanceof DataXException) { + DataXException tempException = (DataXException) e; + ErrorCode errorCode = tempException.getErrorCode(); + if (errorCode instanceof FrameworkErrorCode) { + FrameworkErrorCode tempErrorCode = (FrameworkErrorCode) errorCode; + } + } + + } + + //删除临时文件 + FileUtil.del(new File("jobTmp.conf")); + } + + } diff --git a/core/src/test/java/Test.java b/core/src/test/java/Test.java deleted file mode 100644 index 690f9667..00000000 --- a/core/src/test/java/Test.java +++ /dev/null @@ -1,15 +0,0 @@ -import com.alibaba.datax.core.Engine; - -/** - * @program: datax-all - * @description: - * @author: huzekang - * @create: 2019-04-17 11:37 - **/ -public class Test { - - @org.junit.Test - public void test() { -// Engine.startJob(); - } -} diff --git a/datax-web/src/main/java/com/wugui/dataxweb/controller/JobContentController.java b/datax-web/src/main/java/com/wugui/dataxweb/controller/JobContentController.java index 583ecb2b..2fa69379 100644 --- a/datax-web/src/main/java/com/wugui/dataxweb/controller/JobContentController.java +++ b/datax-web/src/main/java/com/wugui/dataxweb/controller/JobContentController.java @@ -2,6 +2,8 @@ package com.wugui.dataxweb.controller; import com.alibaba.datax.core.Engine; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; /** @@ -13,11 +15,11 @@ import org.springframework.web.bind.annotation.RestController; @RestController public class JobContentController { - @GetMapping("/startJob") - public void startJob() { + @GetMapping("/testStartJob") + public void testStartJob() { // 指定获取作业配置json的接口,此处用下面mock出来的接口提供 String jobPath = "http://localhost:8080/mock_stream2stream"; - Engine.startJob(jobPath); + Engine.testStartJob(jobPath); } @GetMapping("/mock_oracle2mongodb") @@ -114,5 +116,16 @@ public class JobContentController { "}"; } + /** + * 通过接口传入json配置启动一个datax作业 + * @param jobJson + * @return + */ + @PostMapping("/runJob") + public String runJob(@RequestBody String jobJson) { + Engine.startJobByJsonStr(jobJson); + return "success"; + } + }