社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
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"; } } }
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!