java中调用kettle转换文件
java中调用kettle转换文件
通过命令行也能够调用,然后java中调用命令行代码也能够。这样没有和java代码逻辑无缝集成。本文说明kettle5.1中假设通过其它API和java代码无缝集成;网上大多数资料都是低版本号的。在kettle5.x中已经不能执行。
1、 须要哪些jar文件
以kettle开头的是必须,上图最以下三个也要;红色框中的两个是我測试转换用到的。各自是生成UUID和文件。
要是少了jar文件,执行程序一定报错。大家依据错误到kettle安装文件夹LIB中找对应的jar加到编译路径中。
2、 演示样例说明怎样通过java调用转换
演示样例是把一个excel的内容导入到数据中。excel仅仅有两列,所以须要在kettle中生成一列uuid,然后导入到数据库中。
默认生成的uuid有‘-’间隔符,所以通过“Replace in string”替换为空;
excel步骤,使用了命名參数,所以要在转换配置设置命名參数。
演示样例代码例如以下:
publicclass KettleUtil2 {
   public String RES_DIR = "res";
   private String fullFileName ;
 
   public KettleUtil2(String fileName){
      fullFileName = System.getProperty("user.dir") + File.separator + RES_DIR;
      fullFileName += File.separator + fileName;
   }
   /**
    * 没有參数是,设置參数为null
    * @param paras
    */
   publicvoid runTransformation(Map<String,String> paras) {
      try {
        KettleEnvironment.init();
 
        TransMeta transMeta = new TransMeta(fullFileName);
        Trans  transformation =new Trans(transMeta);
       
        for(Map.Entry<String, String> entry: paras.entrySet()) {
            transformation.setParameterValue(entry.getKey(), entry.getValue());
        }
 
        transformation.execute(null);
        transformation.waitUntilFinished();
       
        if (transformation.getErrors() > 0) {
           thrownew RuntimeException(
                 "There wereerrors during transformation execution.");
        }
      } catch (KettleException e) {
        System.out.println(e);
      }
   }
}
最后调用代码例如以下:
publicclass EtlTest {
 
   publicstaticvoid main(String[] args) {
      KettleUtil2 etl = new KettleUtil2("testimport.ktr");
      Map<String,String> para = new HashMap<String,String>();
     
      //给转换中命名參数赋值
      para.put("XlsName", "data");
      etl.runTransformation(para);
   }
}
 
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号