zoukankan      html  css  js  c++  java
  • java调用kettle批量执行

    之前只做了一个java调用单一ktr的例子,在用web程序控制ETL数据抽取过程的时候,难免会遇到要执行一个复选框列表的ktr,那么前段传过来的就不仅仅是一个ktr;那就是一个未知数目的ktr列表了,思想就是封装:遍历:赋值:执行;

     1 package kettle;
     2 
     3 //需要导入的包
     4 
     5 import java.util.ArrayList;
     6 import org.pentaho.di.core.KettleEnvironment;
     7 import org.pentaho.di.trans.TransMeta;
     8 import org.pentaho.di.trans.Trans; 
     9 public class ExecuteBatchLocalTran {
    10     /**
    11      * java调用本地的tran并且传递参数(包括给SQL传参)
    12      */
    13   
    14    public static void main(String arg[]) throws Exception 
    15     {
    16        /*前台页面传递的参数*/
    17        String idname="7";//参数值
    18        String filename1="./test1.ktr";//ktr路径
    19        String filename2="./test2.ktr";//ktr路径
    20        KettleEnvironment.init();//初始化kettle环境
    21        /*定义文件路径,模型元数据,模型三个容器*/
    22        ArrayList<String> list1=new ArrayList<String>();
    23        ArrayList<TransMeta> list2=new ArrayList<TransMeta>();
    24        ArrayList<Trans> list3=new ArrayList<Trans>();
    25        /*添加文件对象*/
    26        list1.add(filename1);
    27        list1.add(filename2);
    28        //System.out.print("=======================1:"+list1.get(0));
    29        //System.out.print("=======================2:"+list1.get(1));
    30        /*遍历文件对象,创建转换元数据对象*/
    31        for(int i=0;i<list1.size();i++)
    32        {
    33        TransMeta transMeta = new TransMeta(list1.get(i));//new tran的源数据对象
    34        list2.add(transMeta);
    35        }
    36        /*遍历转换元数据对象,创建转换对象*/
    37        for(int j=0;j<list2.size();j++)
    38        {
    39        Trans trans = new Trans(list2.get(j));//创建tran对象
    40        list3.add(trans);
    41        }
    42        /*遍历转换对象,执行列表转换*/
    43        for(int h=0;h<list3.size();h++)
    44        {
    45            Trans trans =list3.get(h);//创建tran对象
    46            trans.setVariable("idname",idname);//传参给对象
    47            trans.prepareExecution(null);//异常处理
    48            trans.startThreads();//开始执行
    49            trans.waitUntilFinished();//等待执行完毕
    50            
    51            if(trans.getErrors()!=0)
    52            {
    53            System.err.println("Error encountered!"); 
    54            }
    55            else
    56            {
    57            System.out.println("Success");
    58            }
    59        
    60        }
    61        
    62        
    63        
    64        
    65        
    66       
    67     }
    68 
    69 }
    英文名:kingwang & Email :kingstudy@vip.qq.com
  • 相关阅读:
    Objective C 绘制透明窗口的方法
    在挂载的 NTFS 盘上运行 gdb 会遇到权限问题,导致无法初始化
    使用 Eclipse 打造 操作系统实习 JOS 开发环境
    C# URL 中文编码与解码
    突破教育网的防线,将搜狗浏览器的教育网加速功能全面推向各种浏览器
    linux 截屏工具
    yum install 时 提示某个已安装的库(x86_64)比某个要安装的库(i686) 新导致安装失败
    全方位打造 Eclipse 自定义开发环境
    自动售饮料机的verilog实现
    数字跑表的verilog实现
  • 原文地址:https://www.cnblogs.com/wxjnew/p/3108104.html
Copyright © 2011-2022 走看看