欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java如何批量執(zhí)行datax腳本

 更新時間:2024年02月28日 17:01:30   作者:可樂還是甜的好  
這篇文章主要介紹了Java如何批量執(zhí)行datax腳本問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一、前言

最近在使用datax同步數(shù)據(jù)表,由于好多個表,一開始每次都需要等一個執(zhí)行完再執(zhí)行下一個,這樣明顯效率很低,于是寫了個Java方法來批量操作;

環(huán)境: linux服務(wù)器

二、Java代碼

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @Author: Huang JX
 * @Date: 2021/11/11
 * @Description: datax 批量執(zhí)行腳本,日志存放在當前目錄的 DataxSyncLogs 中;
 * 注意:需要輸入 datax 腳本的文件夾路徑作為 main 函數(shù)的參數(shù),如 home/xxx/datax/job/
 * <p>
 * 使用說明:
 * 1、去掉文件的包名package;
 * 2、將此Java文件放到 /datax/bin/目錄下;
 * 3、javac DataxSyncUtil.java 
 * 4、java DataxSyncUtil [參數(shù)]datax腳本文件夾路徑
 */
public class DataxSyncUtil {
    public static void main(String[] args) throws Exception {
        FileOutputStream out = null;
        StringBuffer sb = new StringBuffer();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        try {
            String jobPath = args[0];
            if (jobPath == null && "".equals(jobPath.trim())) {
                throw new Exception("請輸入datax腳本文件夾路徑");
            }
            String logDir = jobPath + "DataxSyncLogs";
            File logDirFile = new File(logDir);
            if (!logDirFile.exists()) {
                logDirFile.mkdir(); // 創(chuàng)建日志文件夾
            }
            String logFileName = logDir + "/datax_sync_" + sdf.format(new Date()) + ".log";
            File file = new File(logFileName);
            if (!file.exists())
                file.createNewFile();
            out = new FileOutputStream(file, true);
            sb.append("==========================================\n");
            sb.append("==========Datax Sync Job Start!==========\n");
            sb.append("==========================================\n");
            File f = new File(jobPath);
            if (!f.exists()) {
                sb.append(jobPath + " not exists\n");
                return;
            }
            System.out.print(sb.toString());
            out.write(sb.toString().getBytes("utf-8"));
            String cmdStr;
            File fa[] = f.listFiles();
            for (int i = 0; i < fa.length; i++) {
                sb = new StringBuffer();
                File fs = fa[i];
                if (!fs.isDirectory()) {
                    Process pr = null;
                    cmdStr = "python3 datax.py " + jobPath + fs.getName();
                    sb.append("start cmd: " + cmdStr + "\n");
                    System.out.print("start cmd: " + cmdStr + "\n");
                    pr = Runtime.getRuntime().exec(cmdStr);
                    BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream()));
                    String line;
                    while (true) {
                        if (!((line = in.readLine()) != null)) break;
                        sb.append(line + "\n");
                        System.out.print(line + "\n");
                    }
                    in.close();
                    pr.waitFor();
                    out.write(sb.toString().getBytes("utf-8"));
                }
            }
            sb.append("==========================================\n");
            sb.append("===========Datax Sync Job End!===========\n");
            sb.append("==========================================\n");
            System.out.print(sb.toString());
            out.write(sb.toString().getBytes("utf-8"));
        } finally {
            out.flush();
            out.close();
        }
    }
}

注意:

看一下注釋的說明,將job的文件路徑做為main函數(shù)的參數(shù);

【更新記錄】

1、2021-12-06 更新寫日志方式,每跑完一個任務(wù)就寫日志到文件中;

三、使用說明

1.把DataxSyncUtil拷到服務(wù)器中datax的bin目錄下,如/home/xxx/datax/bin/,注意去除Java類的包名;

2.編譯Java程序,javac DataxSyncUtil.java

3.執(zhí)行Java程序,傳入?yún)?shù)為放置datax腳本的文件夾,如java DataxSyncUtil /home/xxx/datax/job/

4.如果想在后臺運行,則為nohup java DataxSyncUtil /home/xxx/datax/job/ &

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java使用DateTimeFormatter格式化輸入的日期時間

    Java使用DateTimeFormatter格式化輸入的日期時間

    這篇文章主要介紹了Java使用DateTimeFormatter格式化輸入的日期時間,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • springboot引入druid解析sql的過程

    springboot引入druid解析sql的過程

    在開發(fā)中,有時我們可能會需要獲取SQL中的表名,那么因為不同的數(shù)據(jù)源類型SQL會存在部分差異,那么我們就可以使用alibaba 的druid包實現(xiàn)不同的數(shù)據(jù)源類型的sql解析,需要的朋友可以參考下
    2023-08-08
  • Java下SpringBoot創(chuàng)建定時任務(wù)詳解

    Java下SpringBoot創(chuàng)建定時任務(wù)詳解

    這篇文章主要介紹了Java下SpringBoot創(chuàng)建定時任務(wù)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 優(yōu)雅地在Java應(yīng)用中實現(xiàn)全局枚舉處理的方法

    優(yōu)雅地在Java應(yīng)用中實現(xiàn)全局枚舉處理的方法

    這篇文章主要給大家介紹了關(guān)于如何優(yōu)雅地在Java應(yīng)用中實現(xiàn)全局枚舉處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-02-02
  • IDEA實現(xiàn)遠程調(diào)試步驟詳解

    IDEA實現(xiàn)遠程調(diào)試步驟詳解

    這篇文章主要介紹了IDEA實現(xiàn)遠程調(diào)試步驟詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Java數(shù)據(jù)開發(fā)輔助工具Docker與普通程序使用方法

    Java數(shù)據(jù)開發(fā)輔助工具Docker與普通程序使用方法

    這是為數(shù)據(jù)開發(fā)人員使用的輔助工具,用于數(shù)據(jù)庫之間的表同步,說同步并不嚴謹,因為不是實時更新的,更確切的說法是復制,可以方便的從一個數(shù)據(jù)庫復制表到另一個數(shù)據(jù)庫,以下遇到同步的詞請理解為復制
    2021-09-09
  • 解決使用@Value(${×××))從properties文件取值的坑

    解決使用@Value(${×××))從properties文件取值的坑

    這篇文章主要介紹了解決使用@Value(${×××))從properties文件取值的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 詳解Spring中@Valid和@Validated注解用法

    詳解Spring中@Valid和@Validated注解用法

    本文將以新增一個員工為功能切入點,以常規(guī)寫法為背景,慢慢烘托出?@Valid?和?@Validated?注解用法詳解,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-07-07
  • Java數(shù)據(jù)結(jié)構(gòu)之單鏈表詳解

    Java數(shù)據(jù)結(jié)構(gòu)之單鏈表詳解

    在之前的學習中,我們主要了解了很多 Java 的 基本語法,但是在之后的 Java學習中,了解基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)的知識非常重要,數(shù)據(jù)結(jié)構(gòu)的思想可以幫助我們更加清晰明白的了解 Java 的解題思路等等.今天我們就來開始學習實現(xiàn)一個Java基礎(chǔ)的單鏈表,需要的朋友可以參考下
    2021-05-05
  • java多線程之停止線程的方法實例代碼詳解

    java多線程之停止線程的方法實例代碼詳解

    這篇文章主要介紹了java多線程之停止線程的方法實例代碼詳解,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05

最新評論