Java-动态传参调用kettle转换和作业

来源:互联网 发布:微信广告植入系统源码 编辑:程序博客网 时间:2024/06/05 09:30

结合网上的资料参考。转换没有达到我想要的结果自己总结下实现了。

注:需要的包kettle lib 下面都有kettle 打头的基本都要.

Kettle6.0下测试的

调用转换传参 不传参的话直接传null

    Stringpath =application.getRealPath("/kettle/voucher.ktr");

    SimpleDateFormatdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    String[]params = {"1","15"};

    String paramurl = "file:///E:/kettle/Aaa";

    Map<String,String>para = new HashMap<String,String>();

    para.put("strurl",paramurl);

    try{              

        KettleEnvironment.init(); //初始化

        //EnvUtil.environmentInit(); 不使用

        TransMeta transMeta = new TransMeta(path);  

        Trans trans = new Trans(transMeta); //创建转换     

        for(Map.Entry<String,String>entry:  para.entrySet() )

        {

//设置命名参数           

           trans.setParameterValue(entry.getKey(),entry.getValue());  

}            

        trans.execute(params); //执行转换设置 命令行参数

        trans.waitUntilFinished(); //等待转换执行结束    

        if(trans.getErrors() >0)

        {

            throw new Exception("转换过程中发生异常!");

        }      

    }catch(Exception e){

        e.printStackTrace();

    }

 

不知道怎么上图片。 说明下好了

转换文件


第一步

名称 类型

 id1 命令行参数1

 id2 命令行参数2

第二步

 变量已 ?  如 where id > ? and id < ?    /按顺序 id1 id2

 下面要选择替换SQL 语句变量。

 从步骤插入数据  就是 第一步的 获取系统信息

第三步

文本文件输出 文件名称 变量 ${strurl} 


注意 这个命名变量必须双击空白处转换属性添加一个命名参数 strurl

 

调用作业传参 不传参的话直接传null

    Stringpathjob =application.getRealPath("/kettle/jobone.kjb");

    Stringstrpath  = request.getRealPath("") +"/kettle";  

    System.out.println(strpath);

    SimpleDateFormatdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    String[] params = {"1","15"};    

    try{          

        KettleEnvironment.init(); //初始化

        JobMeta jobMeta = new JobMeta(pathjob,null);

        Job job = new Job(null,jobMeta);

        //向JOB 脚步传递参数

        job.setVariable("strurl","vouone.ktr");

        job.setVariable("id1","1");

        job.setVariable("id2","15");

       

        job.start();

        job.waitUntilFinished();

       

        if(job.getErrors() >0)

        {

            throw new Exception("作业过程中发生异常!");

        }

    }catch (Exception e){

        e.printStackTrace();

    }  

 


作业文件

这里只需要看第二步 直接${} 就能接受参数无需设置全局命名变量

然后转换文件的话

就是 where id > ${id1} and id < ${id2}

0 0
原创粉丝点击