web调用kettle API 执行作业和转换 笔记

项目中用到kettle想在web中调用,结合网上资料,整理如下,

1,导入所需jar 包,我这里用的是kettle 5.0版本

2 kettle执行工具类

package com.ht.um.util;

import java.io.File;
import java.util.Map;
import java.util.UUID;

import org.apache.log4j.Logger;
import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.core.exception.KettleXMLException;
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;

public class KettleUtil {
			private static Logger logger_info = Logger.getLogger("api-info");
		    private static Logger logger_error = Logger.getLogger("api-error");
		    
		    /**
		     * 执行job
		     * @param initKettleParam
		     * @param kjbFilePath
		     * @param kjbFilePath
		     * @return
		     */
	   public static boolean runKettleJob(Map<String,String> initKettleParam, String kjbFilePath,String kettleHome) {
	        String uuid = UUID.randomUUID().toString();
	        logger_info.info("ExecKettleUtil@runKettleJob:"+uuid+" {kjbFilePath:"+kjbFilePath+"}");
	        try {
	        	innitKettleEnvironment(kettleHome); 
	            //初始化job路径 
	            JobMeta jobMeta = new JobMeta(kjbFilePath, null); 
	            Job job = new Job(null, jobMeta); 
	            //初始化job参数,给kettle文件中的命名参数 设值
	            for (String variableName : initKettleParam.keySet()) {
	            	 //job.setParameterValue("eee", "1111111111");这样不行,下面这种就可以,不知道为什么
	                job.getJobMeta().setParameterValue(variableName, initKettleParam.get(variableName));
	            }
	            // job.execute(0, null);
	            //开始执行
	            job.start(); 
	            //等待转换执行结束 
	            job.waitUntilFinished(); 
	           // System.out.println("*******job.getParameterValue****"+job.getParameterValue("btime"));
	            //System.out.println("*******job.getParameterValue****"+job.getParameterValue("eee")+"***********");
	           // System.out.println("**** job.getParameterDefault*******"+ job.getParameterDefault("btime"));
	            if (job.getErrors() > 0) { 
	                logger_info.info("ExecKettleUtil@runKettleJob:"+uuid+" 执行失败");
	            }else{
	                logger_info.info("ExecKettleUtil@runKettleJob:"+uuid+" 执行成功");
	            }
	            return true;
	        } catch (Exception e) {
	            logger_error.error("ExecKettleUtil@runKettleJob:"+uuid, e);
	            return false;
	        }
	    }
	     
	    /**
	     * @功能描述: 执行Transfer
	     * @使用对象: woaiyitiaocai
	     * @创建作者: woaiyitiaocai
	     * @创建日期: 2017年2月27日 下午3:51:33
	     * @param initKettleParam Transfer参数
	     * @param ktrFilePath Transfer路径
	     * @return
	     */
	   /**
	    * 执行Transfer
	    * @param initKettleParam 参数
	    * @param ktrFilePath 路径
	    * @param kettleHome
	    * @return
	    */
	    public static boolean runKettleTransfer(Map<String,String> initKettleParam, String ktrFilePath,String kettleHome) {
	        Trans trans = null;
	        String uuid = UUID.randomUUID().toString();
	        //String[]params={"2017-01-01","2017-01-04"};
	        logger_info.info("runKettleTransfer:"+uuid+" {ktrFilePath:"+ktrFilePath+"}");
	        try {
	            //初始化 
	        	innitKettleEnvironment(kettleHome);
	            EnvUtil.environmentInit(); 
	            TransMeta transMeta = new TransMeta(ktrFilePath); 
	            //转换 
	            trans = new Trans(transMeta); 
	            //初始化trans参数,脚本中获取参数值:${variableName}
	            for (String variableName : initKettleParam.keySet()) {
	                //trans.setVariable(variableName, initKettleParam.get(variableName));
	            	//设置命名参数
	                trans.setParameterValue(variableName, initKettleParam.get(variableName));  
	            }
	            //执行转换 
	           trans.execute(null);//这个方法可以设置命令行参数
	            //   System.out.println("***********"+trans.getParameterValue("btime"));
	           // trans.prepareExecution(null);//异常处理
	           //  trans.startThreads();//开始执行
	            //等待转换执行结束 
	            trans.waitUntilFinished();
	            if (trans.getErrors() > 0) {
	                logger_info.info("runKettleTransfer:"+uuid+" 执行失败");
	            }else{
	                logger_info.info("runKettleTransfer:"+uuid+" 执行成功");
	            }
	            return true;
	        } catch (Exception e) {
	            logger_error.error("runKettleTransfer:"+uuid, e);
	            return false;
	        }
	    }

	  /**
	   * 初始化
	   * @param kettleHome 项目中.kettle/kettle.properties 所在路径
	   */
	public static void innitKettleEnvironment(String kettleHome) {
		try {
			if (!KettleEnvironment.isInitialized()) {
				// 获得执行类的当前路径
				String user_dir = System.getProperty("user.dir");
				// Kettle初始化需要修改相应的配置路径
				System.setProperty("KETTLE_HOME", kettleHome);
				System.setProperty("user.dir", kettleHome);
				// 运行环境初始化(设置主目录、注册必须的插件等)
				KettleEnvironment.init();
				// Kettle初始化完毕,还原执行类的当前路径
				System.setProperty("user.dir", user_dir);
			}
		} catch (KettleException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

3,在spoon中创建转换文件

设置命名参数,在转换中右击,选择-》转换设置-》弹出转换属性 可以设置命名参数

参数使用直接${} 或‘${}’

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值