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

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

每个表配置一个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配置定时任务


  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值