java 集成kettle

java集成kettle 示例:

方案:
启用定时任务,调用PDI生成的trans.ktr文件

<repository>
    <id>pentaho-releases</id>
    <url>http://repository.pentaho.org/artifactory/repo/</url>
  </repository>

  
< kettle.version > 6.1.0.1-196 </ kettle.version >


         < dependency >  
             < groupId > pentaho-kettle </ groupId >  
             < artifactId > kettle-core </ artifactId >  
             < version > ${kettle.version} </ version >   
         </ dependency >  
          < dependency >  
              < groupId > com.verhas </ groupId >  
              < artifactId > license3j </ artifactId >  
              < version > 1.0.7  </ version >  
          </ dependency >  
         < dependency >  
             < groupId > pentaho-kettle </ groupId >  
             < artifactId > kettle-dbdialog </ artifactId >  
             < version > ${kettle.version} </ version >   
         </ dependency >  
         < dependency >  
             < groupId > pentaho-kettle </ groupId >  
             < artifactId > kettle-engine </ artifactId >  
             < version > ${kettle.version} </ version >   
         </ dependency >  
         < dependency >  
             < groupId > pentaho </ groupId >  
             < artifactId > metastore </ artifactId >  
             < version > ${kettle.version} </ version >  
         </ dependency >
         < dependency >
                 < groupId > com.google.guava </ groupId >
                 < artifactId > guava </ artifactId >
                 < version > 19.0 </ version >
            </ dependency >
      </ dependencies >


DEMO:



211-whicoDB-in_student(table) 插入更新到  localhost-whicoDB-in_student(table) 的trans文件

import  org.pentaho.di.core.KettleEnvironment;
import  org.pentaho.di.core.util.EnvUtil;
import  org.pentaho.di.job.Job;
import  org.pentaho.di.job.JobMeta;
import  org.pentaho.di.trans.Trans;
import  org.pentaho.di.trans.TransMeta;
/**
 * kettle version 6.1.0.1 - 196
 *  @author  jiangnan
 *
 */
public  class  KettleUtil {
     
      /**
      * 调用trans文件
      *  @param  transFileName
      *  @throws  Exception
      */
      public  static  void  callNativeTrans(String  transFileName )  throws  Exception{
           callNativeTransWithParams( null ,  transFileName );
     }
     
      /**
      * 调用trans文件 带参数的
      *  @param  params
      *  @param  transFileName
      *  @throws  Exception
      */
      public  static  void  callNativeTransWithParams(String[]  params  ,String  transFileName )  throws  Exception{
            // 初始化 
           KettleEnvironment.init();
         EnvUtil.environmentInit(); 
         TransMeta  transMeta  =  new  TransMeta( transFileName );
          //转换
         Trans  trans  =  new  Trans( transMeta ); 
          //执行
          trans .execute( params );
          //等待结束
          trans .waitUntilFinished();
          //抛出异常 
         if ( trans .getErrors() > 0){ 
             throw  new  Exception( "There are errors during transformation exception!(传输过程中发生异常)" ); 
        } 
     }
     
      /**
      * 调用job文件
      *  @param  jobName
      *  @throws  Exception
      */
      public  static  void  callNativeJob(String  jobName )  throws  Exception{
            // 初始化 
           KettleEnvironment.init();
        
           JobMeta  jobMeta  =  new  JobMeta( jobName , null );
           Job  job  =  new  Job( null ,  jobMeta );  
            //向Job 脚本传递参数,脚本中获取参数值:${参数名}  
            //job.setVariable(paraname, paravalue);  
             job .start();  
             job .waitUntilFinished();  
             if  ( job .getErrors() > 0) {
             throw  new  Exception( "There are errors during job exception!(执行job发生异常)" ); 
            }  
     }




import  org.apache.logging.log4j.LogManager;
import  org.apache.logging.log4j.Logger;
import  com.stech.business.util.KettleUtil;

public  class  kettleTaskJob {
      private  static  Logger  LOGGER  = LogManager.getLogger(kettleTaskJob. class .getName());

       public  void  run()  throws  Exception {
           LOGGER .info( "*****kettle定时任务运行开始******" );
          String  transFileName  =  "D:/work/kettle/trans.ktr" ;
          KettleUtil.callNativeTrans( transFileName );
           LOGGER .info( "*****kettle定时任务运行结束******" );
      }
     
       public  static  void  main(String[]  args )  throws  Exception {
            kettleTaskJob  job  =  new  kettleTaskJob();
             job .run();
     }
}


2016-11-15 11:47:33,856 INFO  ( VfsLog.java:136 ) - Using "C:\Users\jiangnan\AppData\Local\Temp\vfs_cache" as temporary files store.
2016/11/15 11:47:34 - trans - 为了转换解除补丁开始  [trans]
2016/11/15 11:47:37 - 表输入.0 - Finished reading query, closing connection.
2016/11/15 11:47:37 - 表输入.0 - 完成处理 (I=47, O=0, R=0, W=47, U=0, E=0)
2016/11/15 11:47:38 - 插入 / 更新.0 - 完成处理 (I=47, O=47, R=47, W=47, U=0, E=0)


异常问题解决:

2016-11-15 13:30:41,438 INFO  ( VfsLog.java:136 ) - Using "C:\Users\jiangnan\AppData\Local\Temp\vfs_cache" as temporary files store.
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Suppliers.supplierFunction()Lcom/google/common/base/Function;
     at org.pentaho.di.core.extension.ExtensionPointMap.get( ExtensionPointMap.java:120 )
     at org.pentaho.di.core.extension.ExtensionPointHandler.callExtensionPoint( ExtensionPointHandler.java:45 )
     at org.pentaho.di.trans.TransMeta.loadXML( TransMeta.java:3368 )
     at org.pentaho.di.trans.TransMeta.<init>( TransMeta.java:2732 )
     at org.pentaho.di.trans.TransMeta.<init>( TransMeta.java:2684 )
     at org.pentaho.di.trans.TransMeta.<init>( TransMeta.java:2661 )
     at org.pentaho.di.trans.TransMeta.<init>( TransMeta.java:2641 )
     at org.pentaho.di.trans.TransMeta.<init>( TransMeta.java:2606 )
     at org.pentaho.di.trans.TransMeta.<init>( TransMeta.java:2569 )
     at com.stech.business.util.KettleUtil.callNativeTrans( KettleUtil.java:21 )
     at com.stech.business.quartz.kettleTaskJob.run( kettleTaskJob.java:13 )
     at com.stech.business.quartz.kettleTaskJob.main( kettleTaskJob.java:19 )


项目中依赖传递排除:


0
 
0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值