栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java批量执行datax脚本

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java批量执行datax脚本

一、前言

最近在使用datax同步数据表,由于好多个表,一开始每次都需要等一个执行完再执行下一个,这样明显效率很低,于是写了个Java方法来批量操作;
环境: linux服务器

二、Java代码
public class DataxSyncUtil {

    public static void main(String[] args) throws Exception {
        String jobPath = args[0];
        if (jobPath == null && "".equals(jobPath.trim())) {
            throw new Exception("请输入datax脚本文件夹路径");
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd");
        String logDir = jobPath + "DataxSyncLogs";
        File logDirFile = new File(logDir);
        if (!logDirFile.exists()) {
            logDirFile.mkdir(); // 创建日志文件夹
        }
        String logFileName = logDir + "/datax_sync_" + sdf.format(new Date()) + ".log";
        File file = new File(logFileName);
        if (!file.exists())
            file.createNewFile();
        FileOutputStream out = new FileOutputStream(file, true);
        StringBuffer sb = new StringBuffer();
        System.out.println("==========Datax Sync Job Start!==========");
        sb.append("==========================================n");
        sb.append("==========Datax Sync Job Start!==========n");
        sb.append("==========================================n");
        File f = new File(jobPath);
        if (!f.exists()) {
            System.out.println(jobPath + " 不存在!");
            sb.append(jobPath + " 不存在!n");
            return;
        }
        String cmdStr = "";
        File fa[] = f.listFiles();
        for (int i = 0; i < fa.length; i++) {
            File fs = fa[i];
            if (!fs.isDirectory()) {
                Process pr = null;
                cmdStr = "python3 datax.py " + jobPath + fs.getName();
                System.out.println("start cmd: " + cmdStr);
                sb.append("start cmd: " + cmdStr + "n");
                pr = Runtime.getRuntime().exec(cmdStr);
                BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream()));
                String line = null;
                while (true) {
                    if (!((line = in.readLine()) != null)) break;
                    System.out.println(line);
                    sb.append(line + "n");
                }
                in.close();
                pr.waitFor();
            }
        }
        System.out.println("Datax Sync Job End!");
        sb.append("==========================================n");
        sb.append("===========Datax Sync Job End!===========n");
        sb.append("==========================================n");
        out.write(sb.toString().getBytes("utf-8"));
        out.close();
    }
}

【注意】看一下注释的说明,将job的文件路径做为main函数的参数;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/489867.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号