java整合kettle--实现数据定时同步

工具:springboot,kettle核心jar包(xxl-job,jenkins,k8,docker)

实现数据库的增量同步,需要编写好kettle转换文件以配置文件的形式,整合到springboot,有改动只需要更换转换文件,不需要更新jar包,job用于灵活调整定时同步,再结合jenkins自动部署,十分方便。

1、首先用kettle画图制作转换文件,Spoon.bat启动;

2、springboot整合

结构:

依赖:

lib存放kettle的核心jar包(在kettle软件的lib里都有):

核心代码:

/**
     * 执行转换
     */
    public R runTrans(){
        this.runKtr(kettleConfig.getPathSupplier(),null);
        this.runKtr(kettleConfig.getPathBankInfo(),null);
        this.runKtr(kettleConfig.getPathQua(),null);
        return R.ok("转换执行成功");
    }

    /**
     * 执行ktr文件
     *
     * @param filename supplier-4.ktr    supplier-bank-info.ktr     supplier-qua.ktr
     * @param params
     * @return
     */
    @Override
    public R runKtr(String filename, Map<String, String> params) {
        try {
            KettleEnvironment.init();
//            TransMeta tm = new TransMeta(dirPath1 + File.separator + filename);
            TransMeta tm = new TransMeta(filename);

            Trans trans = new Trans(tm);
            if (params != null) {
                Iterator<Map.Entry<String, String>> entries = params.entrySet().iterator();
                while (entries.hasNext()) {
                    Map.Entry<String, String> entry = entries.next();
                    trans.setParameterValue(entry.getKey(), entry.getValue());
                }
            }
            trans.execute(null);
            trans.waitUntilFinished();
        } catch (Exception e) {
            e.printStackTrace();
            return R.fail("启动转换失败");
        }
        return R.ok("转换执行成功");
    }

    /**
     * 执行kjb文件
     *
     * @param filename supplier-single.kjb
     * @param params
     * @return
     */
    @Override
    public R runKjb(String filename, Map<String, String> params) {
        try {
            KettleEnvironment.init();
            JobMeta jm = new JobMeta(filename, null);
            Job job = new Job(null, jm);
            if (params != null) {
                Iterator<Map.Entry<String, String>> entries = params.entrySet().iterator();
                while (entries.hasNext()) {
                    Map.Entry<String, String> entry = entries.next();
                    job.setVariable(entry.getKey(), entry.getValue());
                }
            }
            job.start();
            job.waitUntilFinished();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return R.ok("job执行成功");
    }

jenkins部署:

 

xxl-job定时任务,实现定时同步(kettle自身也可以设置定时,但是job更为灵活):

kettle转换文件编写简易整理--->待续

springboot代码整合kettle完整代码--->待续

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

花落竹思

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

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

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

打赏作者

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

抵扣说明:

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

余额充值