Java实现Datax定时批量执行任务

xiaoxiao2021-02-28  28

情景:业务需要,每天要从一个数据库传数据到另一个数据库,每次传上百个表的数据,

每个表配置一个json文件,传一次数据就要使用一次cmd命令,那一天就要输入上百条命令。

所以我使用Java实现自动生成cmd命令并且自动执行。

命令格式:python datax路径 json文件路径+名字

环境:JDK1.8,Python2.7.+,Windows或者Linux

 事先准备好要执行的json文件,放到同一个文件夹下。

上代码:

import java.io.BufferedReader; import java.io.File; import java.io.FilenameFilter; import java.io.InputStreamReader; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class 定时批量执行datax { public static Long oneDay = (long)24 * 60 * 60 * 1000; //每一天批量执行一次 public static Long initDelay = (long)0 * 1000; //延迟0分钟开始执行 public static String jsonPath = "C:/Users/abc/Desktop/json"; //json文件夹地址 public static String dataxPath = "E:/datax/bin/datax.py"; //datax的python文件地址 public static void main(String[] args) { //定时任务 ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); service.scheduleAtFixedRate(new Runnable(){ @Override public void run() { exeDatax(); } }, initDelay, oneDay, TimeUnit.MILLISECONDS); } //批量执行datax public static void exeDatax(){ try { System.out.println("------------------start----------------------"); String[] str = getFileName(jsonPath); for (String name : str) { String windowcmd = "python "+dataxPath+" "+jsonPath+"/"+name; System.out.println(windowcmd); Process pr = Runtime.getRuntime().exec(windowcmd); BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream())); String line = null; while ((line = in.readLine()) != null) { System.out.println(line); } in.close(); pr.waitFor(); } System.out.println("----------------end------------------"); } catch (Exception e) { e.printStackTrace(); } } //获取文件夹下所有 json 文件名 public static String[] getFileName(String path) { File file = new File(path); String[] fileName = file.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { if (name.endsWith(".json")) { return true; } return false; } }); return fileName; } }

原本是在Windows下运行的,放到Linux下也能用。

不想用Java的也可以看看一位大神写的用crond实现: DataX配置定时任务

转载请注明原文地址: https://www.6miu.com/read-2350342.html

最新回复(0)