java与kettle的集成DEMO

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 )


项目中依赖传递排除:


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值