瀏覽代碼

加入动态配制文件

许家凯 4 年之前
父節點
當前提交
8346908bf7

+ 12 - 0
pom.xml

@@ -97,6 +97,18 @@
             <version>2.9.5</version>
         </dependency>
 
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.4</version>
+        </dependency>
+
+        <!-- https://mvnrepository.com/artifact/commons-cli/commons-cli -->
+        <dependency>
+            <groupId>commons-cli</groupId>
+            <artifactId>commons-cli</artifactId>
+            <version>1.4</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 70 - 9
src/main/java/com/winhc/dataworks/flow/touch/Main.java

@@ -13,7 +13,9 @@ import com.winhc.dataworks.flow.touch.service.TouchService;
 import com.winhc.dataworks.flow.touch.utils.DingUtils;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.cli.*;
 
+import java.io.FileNotFoundException;
 import java.time.Duration;
 import java.time.LocalDateTime;
 import java.util.*;
@@ -29,26 +31,85 @@ import java.util.stream.Collectors;
 public class Main {
     @Autowired
     private TouchService touchService;
+    private static final Options options = new Options();
+
 
     @Autowired
     private DingUtils dingUtils;
 
+    static {
+        options.addOption("s", "singleJob", false, "选填,是单独触发一个业务流程");
+        options.addOption("b", "bizDate", true, "必填,业务时间");
+        options.addOption("f", "fileName", true, "必填,yaml文件");
 
-    public static void main(String[] args) {
-        if (args.length != 1) {
-            System.out.println("请输入调度的 bizDate");
-            System.exit(-9999);
+        options.addOption("flow", "flow", true, "业务流程名");
+        options.addOption("task", "taskName", true, "任务名");
+    }
+
+    private static void verify(CommandLine commandLine) {
+        try {
+            if (!commandLine.hasOption("b") || !commandLine.hasOption("f")) {
+                throw new RuntimeException();
+            }
+            if (commandLine.hasOption("s")) {
+                if (!commandLine.hasOption("flow") || !commandLine.hasOption("task")) {
+                    throw new RuntimeException();
+                }
+            }
+        } catch (Exception e) {
+            HelpFormatter formatter = new HelpFormatter();
+            formatter.printHelp("很棒,参数错误", options);
+            System.exit(-1);
         }
+    }
+
+
+    public static void main(String[] args) {
         LightDiContext context = LightDi.initContextByPackage(Main.class.getPackage().getName());
-        Main bean = context.getBean(Main.class);
-        bean.start(args[0]);
+        DingUtils dd = context.getBean(DingUtils.class);
+        CommandLineParser parser = new DefaultParser();
+        try {
+            CommandLine commandLine = parser.parse(options, args);
+            verify(commandLine);
+            String bizDate = commandLine.getOptionValue("b");
+            String fileName = commandLine.getOptionValue("f");
+            List<DataWorksFlowJob> jobs = SchemaInit.getJobs(fileName);
+
+            if (commandLine.hasOption("s")) {
+                log.info("执行单个业务流程!");
+                String flow = commandLine.getOptionValue("flow");
+                String task = commandLine.getOptionValue("task");
+                SingleJobMain singleJobMain = context.getBean(SingleJobMain.class);
+                String msg = "开始执行单个业务流程!bizDate:" + bizDate + " flow:" + flow + " task:" + task + " JobFile:" + commandLine.getOptionValue("f");
+//                dd.send(msg);
+                log.info(msg);
+                singleJobMain.start(flow, task, bizDate, jobs);
+            } else {
+                log.info("触发全部业务流程!");
+                Main bean = context.getBean(Main.class);
+                String msg = "开始执行全部业务流程!bizDate:" + bizDate + " JobFile:" + commandLine.getOptionValue("f");
+                dd.send(msg);
+                log.info(msg);
+                bean.start(bizDate, jobs);
+            }
+        } catch (ParseException e) {
+            HelpFormatter formatter = new HelpFormatter();
+            formatter.printHelp("很棒,参数错误", options);
+            System.exit(-1);
+        } catch (FileNotFoundException e) {
+            log.error(e.getMessage());
+            System.exit(-2);
+        } catch (Exception e) {
+            dd.send(e.getMessage());
+            log.error(e.getMessage(), e);
+            System.exit(-3);
+        }
     }
 
     @SneakyThrows
-    private void start(String bizDate) {
-        log.info("start");
+    private void start(String bizDate, List<DataWorksFlowJob> jobs) {
+        log.info("start!");
         LocalDateTime start = LocalDateTime.now();
-        List<DataWorksFlowJob> jobs = SchemaInit.LIST;
         List<TaskInfo> collect = jobs.stream()
                 .flatMap(dataWorksFlowJob -> {
                     List<DataWorksFlowTask> task = dataWorksFlowJob.getTask();

+ 6 - 6
src/main/java/com/winhc/dataworks/flow/touch/TestMain.java

@@ -24,7 +24,7 @@ import java.util.Map;
  */
 @Slf4j
 @Service
-public class TestMain {
+public class SingleJobMain {
     @Autowired
     TouchService touchService;
 
@@ -33,14 +33,14 @@ public class TestMain {
             System.out.println("请输入调度的 业务流程名 任务名 bizDate");
             System.exit(-9999);
         }
-        LightDiContext context = LightDi.initContextByPackage(TestMain.class.getPackage().getName());
-        TestMain bean = context.getBean(TestMain.class);
-        bean.start(args[0], args[1], args[2]);
+        LightDiContext context = LightDi.initContextByPackage(SingleJobMain.class.getPackage().getName());
+        SingleJobMain bean = context.getBean(SingleJobMain.class);
+        List<DataWorksFlowJob> jobs = SchemaInit.getJobs();
+        bean.start(args[0], args[1], args[2], jobs);
     }
 
     @SneakyThrows
-    public void start(String flow, String taskName, String bizDate) {
-        List<DataWorksFlowJob> jobs = SchemaInit.LIST;
+    public void start(String flow, String taskName, String bizDate, List<DataWorksFlowJob> jobs) {
         DataWorksFlowJob dataWorksFlowJob = jobs.stream().filter(j -> j.getFlow().equals(flow)).findFirst().orElseThrow(NullPointerException::new);
 
         DataWorksFlowTask dataWorksFlowTask = dataWorksFlowJob.getTask().stream().filter(t -> t.getTaskName().equals(taskName)).findFirst().orElseThrow(NullPointerException::new);

+ 16 - 11
src/main/java/com/winhc/dataworks/flow/touch/configuration/SchemaInit.java

@@ -3,9 +3,11 @@ package com.winhc.dataworks.flow.touch.configuration;
 import com.winhc.dataworks.flow.touch.bean.DataWorksFlowJob;
 import com.winhc.dataworks.flow.touch.bean.DataWorksFlowTask;
 import com.winhc.dataworks.flow.touch.bean.NodeParam;
+import lombok.SneakyThrows;
 import org.yaml.snakeyaml.Yaml;
 
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.Reader;
 import java.util.List;
@@ -19,23 +21,26 @@ import java.util.stream.Collectors;
  */
 @SuppressWarnings("all")
 public class SchemaInit {
-    public static final List<DataWorksFlowJob> LIST;
 
-    private static final String fileName = "task-xjk.yaml";
+    private static final String defaultFileName = "task-xjk.yaml";
 
-    static {
+    @SneakyThrows
+    public static List<DataWorksFlowJob> getJobs() {
+        String path = Object.class.getResource("/").getPath().substring(1) + defaultFileName;
+        return parseJobs(path);
+    }
+
+    public static List<DataWorksFlowJob> getJobs(String fileName) throws FileNotFoundException {
+        return parseJobs(fileName);
+    }
+
+    private static List<DataWorksFlowJob> parseJobs(String path) throws FileNotFoundException {
         Yaml yml = new Yaml();
-        String path = Object.class.getResource("/").getPath().substring(1) + fileName;
-        Reader reader = null;
-        try {
-            reader = new FileReader(new File(path));
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
+        Reader reader = new FileReader(new File(path));
         Map map = yml.loadAs(reader, Map.class);
 
         List jobs = ((List) map.get("job"));
-        LIST = (List<DataWorksFlowJob>) jobs
+        return (List<DataWorksFlowJob>) jobs
                 .stream()
                 .map(m -> {
                     String project = ((String) ((Map<String, Object>) m).get("project"));

+ 2 - 1
src/main/java/com/winhc/dataworks/flow/touch/TestDing.java

@@ -1,7 +1,8 @@
-package com.winhc.dataworks.flow.touch;
+package com.winhc.dataworks.flow.touch.test;
 
 import com.helospark.lightdi.LightDi;
 import com.helospark.lightdi.LightDiContext;
+import com.winhc.dataworks.flow.touch.Main;
 import com.winhc.dataworks.flow.touch.utils.DingUtils;
 
 /**

+ 1 - 1
src/main/java/com/winhc/dataworks/flow/touch/test/TestFlow.java

@@ -12,7 +12,7 @@ import java.util.List;
  */
 public class TestFlow {
     public static void main(String[] args) {
-        List<DataWorksFlowJob> list =  SchemaInit.LIST;
+        List<DataWorksFlowJob> list = SchemaInit.getJobs();
         System.out.println(list);
     }
 }

+ 1 - 1
src/main/java/com/winhc/dataworks/flow/touch/utils/DingUtils.java

@@ -78,7 +78,7 @@ public class DingUtils {
     }
 
     private static String getMsgBody(String msg) {
-        return "{\"msgtype\": \"markdown\",\"text\": {\"content\": \"" + msg + "\"}}";
+        return "{\"msgtype\": \"text\",\"text\": {\"content\": \"" + msg + "\"}}";
     }
 
     @SneakyThrows