java代码调用kettle的一次实践

说明 第一次写博客,没经验,比较乱,抱歉!下面步入正文。使用kettle版本为8.2,开始时使用7.1但是7.1中写java代码片段时出现不少问题,换成8.2问题都消失了。 所遇问题 jar包问题(缺少jar包,jar包版本低) kettle插件问题先上代码package com.code;import org.pentaho.di.core.KettleEnvi...
摘要由CSDN通过智能技术生成
  • 说明

第一次写博客,没经验,比较乱,抱歉!下面步入正文。

使用kettle版本为8.2,开始时使用7.1但是7.1中写java代码片段时出现不少问题,换成8.2问题都消失了。

  • 所遇问题

  1. jar包问题(缺少jar包,jar包版本低)
  2. kettle插件问题

先上代码

package com.code;
import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.logging.LogLevel;
import org.pentaho.di.core.plugins.PluginFolder;
import org.pentaho.di.core.plugins.StepPluginType;
import org.pentaho.di.job.Job;
import org.pentaho.di.job.JobMeta;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class ExecuteJob {
    public static void main(String[] args) {
        //为作业设置变量
        Map<String, String> map = new HashMap<>();
        //手动参数(手动:1 定时:2)定时执行无需设置  默认为2
        map.put("sdcs", "");
        //实时上传设置流水号
        map.put("ywczlsh", "");
        String path = "D:\\KETTLE数据上传\\糖尿病\\糖尿病报卡\\糖尿病报告卡作业.kjb";
        ExecuteJob.runJob(map, path);
    }

    /**
     * 执行作业
     * @param maps 设置作业参数
     * @param jobPath Job脚本的路径
     */
    private static void runJob(Map<String, String> maps, String jobPath) {
        try {
            //在kettle环境init前,将所需要的插件加载到环境中(本作业执行只用到了pdi-xml-plugin插件,用于处理xml)
            StepPluginType.getInstance().getPluginFolders().
                    add(new PluginFolder("D:\\TIM\\kettle8.2\\data-integration\\plugins\\pdi-xml-plugin", false, true));
            //加载环境
            KettleEnvironment.init();
            // jobPath 是Job脚本的路径及名称
            JobMeta jobMeta = new JobMeta(jobPath, null);
            //初始化job
            Job job = new Job(null, jobMeta);
            //日志级别
            job.setLogLevel(LogLevel.DEBUG);
            // 向Job 脚本传递参数job.setVariable(paraname, paravalue)
            Set<Map.Entry<String, String>> set=maps.entrySet();
            for(Iterator<Map.Entry<String, String>> it = set.iterator(); it.hasNext();){
                Map.Entry<String, String> ent=it.next();
                job.setVariable(ent.getKey(), ent.getValue());
            }
            //开始执行
            job.start();
            //等待结束
            job.waitUntilFinished();
            //判断执行是否成功
            if (job.getErrors() > 0) {
                throw new Exception("执行job发生异常!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

当时由于缺少kettle中的插件一直报错

2019/02/15 10:20:35 - 添加根节点.0 - ERROR (version 8.2.0.0-342, build 8.2.0.0-342 from 2018-11-14 10.30.55 by buildguy) : Can't run transformation due to plugin missing
2019/02/15 10:20:35 - 添加根节点.0 - ERROR (version 8.2.0.0-342, build 8.2.0.0-342 from 2018-11-14 10.
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值