Etl工具之Kettle与java集成二

来源:互联网 发布:触摸屏查询软件 编辑:程序博客网 时间:2024/06/14 10:35

1.上篇文章已经讲到,怎么新建一个转换,当然,那只是很简单的操作,下面我们将学习怎么将在kettle新建的转换或任务,放入到程序中,由程序调用执行

首先,我们需要将kettle的jar包放入到程序的lib目录下,当然不只kettle包,还有其他一些重要的包,可以直接到http://download.csdn.net/download/xiaosemei/9967136进行下载,


2.新建项目kettle ,我这里用来演示,


3.kettle初始化代码(我这里执行和初始是分开的。。方便在次执行的时候不需要初始化)

import org.pentaho.di.core.KettleEnvironment;import org.pentaho.di.core.database.DatabaseMeta;import org.pentaho.di.core.exception.KettleException;import org.pentaho.di.repository.RepositoryDirectoryInterface;import org.pentaho.di.repository.kdr.KettleDatabaseRepository;import org.pentaho.di.repository.kdr.KettleDatabaseRepositoryMeta;/** * Created by 31767 on 2017/8/16. */public class KettleEnvironments {    public  static KettleDatabaseRepository repository;    public  static DatabaseMeta databaseMeta;    public  static KettleDatabaseRepositoryMeta kettleDatabaseMeta;    public  static RepositoryDirectoryInterface directory;    /*    * KETTLE初始化*/    public static  String  KettleEnvironments() {         try {            KettleEnvironment.init();repository = new KettleDatabaseRepository();         databaseMeta = new DatabaseMeta("ETL", "Oracle", "Native", "172.14.5.6","cdr", "1521",                "ETL", "xin");//资源库数据库地址,我这里采用oracle数据库         kettleDatabaseMeta = new KettleDatabaseRepositoryMeta("ETL", "ERP",                "Transformation description", databaseMeta);        repository.init(kettleDatabaseMeta);        repository.connect("adm", "adm");//资源库用户名和密码        directory = repository.loadRepositoryDirectoryTree();        } catch (KettleException e) {            e.printStackTrace();            return  e.getMessage();        }        return null;      }}
4.kettle执行代码

/** * Created by DEH on 2017/7/3. */import org.pentaho.di.core.exception.KettleException;import org.pentaho.di.job.Job;import org.pentaho.di.job.JobMeta;import org.pentaho.di.repository.Repository;import org.pentaho.di.repository.RepositoryDirectoryInterface;import org.pentaho.di.repository.kdr.KettleDatabaseRepository;import org.pentaho.di.trans.Trans;import org.pentaho.di.trans.TransMeta;public class ExecRepository {
/*测试代码,*/      public static void main(String[] args) {         KettleEnvironments.KettleEnvironments();        String transName=null;//转换或作业名称        String[] params=null;//参数        try {            String result = ExecuteDataBaseRepTran(KettleEnvironments.repository, transName, params, null);        } catch (KettleException e) {            e.printStackTrace();        }    }    /*执行转换文件*/    private static String ExecuteDataBaseRepTran(KettleDatabaseRepository repository, String transName, String param[], String jgname) throws KettleException {        //根据变量查找到模型所在的目录对象,此步骤很重要。        RepositoryDirectoryInterface directory = repository.findDirectory("/");        //创建ktr元对象        TransMeta transformationMeta = ((Repository) repository).loadTransformation(transName, directory, null, true, null);        //创建ktr        Trans trans = new Trans(transformationMeta);        //执行ktr        trans.execute(param);        //等待执行完毕        trans.waitUntilFinished();        if (trans.getErrors() > 0) {            return "NO";        } else {            return "OK";        }    }    private static String execRepositoryJobs(KettleDatabaseRepository repository, RepositoryDirectoryInterface directory, String jobName, String jhid) throws KettleException {        JobMeta jobMeta = ((Repository) repository).loadJob(jobName, directory, null, null);        Job job = new Job(repository, jobMeta);        job.setVariable("id", jhid);        job.start();        job.waitUntilFinished();        if (job.getErrors() > 0) {            return "NO";        } else {            return "OK";        }    }}

至此,kettle与java集成完成