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

java调用datax实现不同数据库的表的同步

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

java调用datax实现不同数据库的表的同步

        最近工作中需要对不同数据库中的两个表的数据进行同步,然而本菜鸡只会先将表里的数据清空,让后通过@DS注解查询另一张表的数据插入到被清空的表中。本来,代码都写完了,开始运行。哦嚯,由于命名规范,两个表的名称不一样,报错了,找不到那张表。但字段都是一样的,为此再写一个实体,加上@TableName注解又不太合适。前辈告诉我说,用datax同步数据。

        一开始,下载的datax的源码,弄了半天不会用。所以直接用现成的吧,下载完解压就行了。

放上链接:datax下载地址

        在bin目录下可以看到datax.py,看到py所以需要安装python才能运行。一开始我安装的python3.7运行会报错,因为3的print的语法变了,对比2多了个括号,安装2.7就好了。

        

把要执行的操作写在.json文件中,一般放在job目录下。这里的reader和writerr就跟io流里的一样。

{
  "job": {
    "content": [
      {

        "reader": {
          "name": "mysqlreader",
          "parameter": {
            "username": "",
            "password": "",
            "column": ["*"],
            "splitPk": "id",
            "connection": [
              {
                "table": [
                  "staff_base_info"
                ],
                "jdbcUrl": [
                  ""
                ]
              }
            ]
          }
        },
        "writer": {
          "name": "mysqlwriter",
          "parameter": {
            "writeMode": "insert",
            "username": "",
            "password": "",
            "column": [
              "*"
            ],
            "session": [
              "set session sql_mode='ANSI'"
            ],
            "preSql": [
              "truncate safe_staff_base_info"
            ],
            "connection": [
              {
                "jdbcUrl": "",
                "table": [
                  "safe_staff_base_info"
                ]
              }
            ]
          }

        }
      }
    ],
    "setting": {
      "speed": {
        "channel": 5
      }
    }
  }
}

 完成后在命令行输入 python D:dataxbindatax.py D:dataxjobtest.json

如果 数据库的用户名和密码都正确的情况下,还是报错说密码不正确啥的,大概率是驱动的问题。驱动在D:dataxpluginreadermysqlreaderlibs下,datax原生的驱动是5点几来着,我是在本地的maven仓库里找到的驱动换上的,图中是已经换好了,然后mysqlwriter也要换上。

 

 如果运行的时候有乱码,可以在运行前命令行输入

chcp 65001

 然后运行,应该就没问题了,现在我已经换回python3.7了,偷个懒,就不运行了。

那接下就是通过java代码来执行这个脚本。看了前辈的代码,可以通过CommandLine这个类实现。具体如下:

public R test() {
		new Thread() {
			@SneakyThrows
			@Override
			public void run() {
				long startTime = System.currentTimeMillis();    //获取开始时间
				CommandLine cmd = new CommandLine("C:\Program Files\Python27\python");
				cmd.addArgument("D:\datax\bin\datax.py");
				cmd.addArgument("D:\datax\job\test.json");
				DefaultExecutor executor = new DefaultExecutor();
				ExecuteWatchdog watchdog = new ExecuteWatchdog(600000);
				executor.setWatchdog(watchdog);
				executor.execute(cmd);
				long endTime = System.currentTimeMillis();    //获取结束时间
				System.err.println("==============================================================================n" + "程序运行时间:" + (endTime - startTime) / 1000 + "s" + "n==============================================================================");
			}
		}.start();
		return R.status(true);
	}

 搞定,写完了,开始摸鱼。

 

 

 

        

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

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

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