springboot整合datax实现数据同步

1.源码下载

git clone git@github.com:alibaba/DataX.git

需要下载核心的包,core与common,在maven下进行安装到本地

mvn install:install-file -DgroupId=com.datax -DartifactId=datax-core -Dversion=1.0.0 -Dpackaging=jar -Dfile=datax-core-0.0.1-SNAPSHOT.jar
mvn install:install-file -DgroupId=com.datax -DartifactId=datax-common -Dversion=1.0.0 -Dpackaging=jar -Dfile=datax-common-0.0.1-SNAPSHOT.jar

2.mysql创建源表以及目标表

-- testdata.source_table definition
CREATE TABLE `source_table` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `address` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- testdata.target_table definition

CREATE TABLE `target_table` (
  `id` int NOT NULL DEFAULT '0',
  `name` varchar(100) DEFAULT NULL,
  `address` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

3.使用存储过程生成测试数据

///存储过程生成测试数据 100w 
create procedure geneData(in loop_times int)
begin
declare i int default 1;
	while i <= loop_times do
		set @name = CONCAT('elite',i);
		set @address =CONCAT('xxx',i);
		INSERT INTO source_table(name,address)
		VALUES(@name,@address);
		set i=i+1;
	end while;
end

3.创建springboot项目

1.引入datax的核心包

     <!--datax-->

        <dependency>
            <groupId>com.datax</groupId>
            <artifactId>datax-core</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.datax</groupId>
            <artifactId>datax-common</artifactId>
            <version>1.0.0</version>
        </dependency>

2.job的配置

{
   "job": {
    "setting": {
      "speed": {
        "channel":2
      }
    },
    "content": [
      {
        "reader": {
          "name": "mysqlreader",
          "parameter": {
            "username": "username",
            "password": "password",
            "splitPk": "id",
            "column": ["id","name","address"],
            "connection": [
              {
                "jdbcUrl": ["jdbc:mysql://ip:端口/testdata?useUnicode=true&characterEncoding=UTF-8&useSSL=false"],
                "table": ["source_table"]
              }
            ]
          }
        },
        "writer": {
          "name": "mysqlwriter",
          "parameter": {
            "username": "username",
            "password": "password",
            "column": ["id","name","address"],
            "connection": [
              {
                "table": [
                  "target_table"
                ],
                "jdbcUrl": "jdbc:mysql://ip:端口/testdata?useUnicode=true&characterEncoding=UTF-8&useSSL=false"
              }
            ]
          }
        }
      }
    ]
  }
}

2.测试代码

  • 需要指定datax的home目录
  • 指定运行的参数
public class TestMain {
    public static String getCurrentClasspath(){

        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        String currentClasspath = classLoader.getResource("").getPath();
        // 当前操作系统
        String osName = System.getProperty("os.name");
        if (osName.startsWith("Win")) {
            // 删除path中最前面的/
            currentClasspath = currentClasspath.substring(1, currentClasspath.length()-1);
        }
        return currentClasspath;
    }
    public static void main(String[] args) {
       
        String fileName = getCurrentClasspath()+ "/configuration/job.json";
        System.out.println(fileName);
        System.setProperty("datax.home","D:\\devproject\\devcode\\code\\datax\\target\\datax\\datax");
        String[] datxArgs2 = {  "-job", getCurrentClasspath()+ "/configuration/job.json","-mode", "standalone", "-jobid", "-1"};
        try {
            Engine.entry(datxArgs2);
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }
}

4.测试

4.1 不加splitpk的情况下

16:41:03.086 [job-0] INFO com.alibaba.datax.core.job.JobContainer - 
任务启动时刻                    : 2023-03-26 16:40:42
任务结束时刻                    : 2023-03-26 16:41:03
任务总计耗时                    :                 20s
任务平均流量                    :            1.22MB/s
记录写入速度                    :          50000rec/s
读出记录总数                    :             1000000
读写失败总数                    :                   0

4.1 加splitpk的情况下

任务启动时刻                    : 2023-03-26 16:48:26
任务结束时刻                    : 2023-03-26 16:48:37
任务总计耗时                    :                 10s
任务平均流量                    :            2.45MB/s
记录写入速度                    :         100000rec/s
读出记录总数                    :             1000000
读写失败总数                    :                   0
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Spring Boot项目中集成DataX可以按照以下步骤进行操作: 1. 首先,添加DataX的依赖。在项目的pom.xml文件中,添加以下依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>datax</artifactId> <version>1.0.0</version> </dependency> ``` 2. 创建DataX配置文件。在src/main/resources目录下创建datax目录,并创建一个json格式的DataX配置文件,例如job.json。在该配置文件中指定数据源、目标数据源和数据转换等信息。 3. 创建DataX任务执行类。在Spring Boot项目中创建一个Java类,用于执行DataX任务。可以使用DataX提供的API来执行任务。例如: ```java import com.alibaba.datax.core.DataX; import com.alibaba.datax.core.DataXEngine; import import com.alibaba.datax.core.Engine; import com.alibaba.datax.core.job.JobContainer; import com.alibaba.datax.core.job.meta.State; public class DataXJobExecutor { public void executeJob(String jobPath) { JobContainer jobContainer = DataXEngine.getJobContainer(jobPath, null); Engine engine = DataXEngine.getEngineConfig(); State state = engine.start(jobContainer); if (state == State.SUCCEEDED) { // 执行成功 } else { // 执行失败 } } } ``` 4. 在Spring Boot应用中调用DataX任务执行类。在需要执行DataX任务的地方调用DataXJobExecutor类的executeJob方法,传入DataX配置文件的路径即可开始执行任务。 这样就完成了在Spring Boot项目中集成DataX的步骤。你可以根据自己的需求进行相应的配置和调整。希望对你有帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小刘同学要加油呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值