您的位置:首页 > 编程语言 > Java开发

Etl工具之Kettle与java集成二

2017-09-06 17:33 253 查看
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集成完成
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  kettle 集成 java