这个问题可能在一个月前就接触到了,但它一直被推迟到今天;问题的解决方案来自互联网,事实上,我也想说,问题的解决更多地取决于我们自己的想法,但更多的爱,让我们直接进入主题!
环境:kettle-spoon 4.2.0,oracle11g,myeclipse6.5,sqlserver2008
前提:在kettle图形界面spoon里面做了一个ktr此时我的转换模型ktr信息如下图所示:
Step1:在myeclipse创建project,导入kettle集成所需的包
Step二、重点分析与code源码
//定义ktr名字
private static String transName = "test1";
//初始化kettle环境
KettleEnvironment.init();
///创建资源库对象,此时对象仍然是空对象
KettleDatabaseRepository repository = new KettleDatabaseRepository();
///创建资源库数据库对象类似于我们spoon创建资源库
DatabaseMeta dataMeta =
new DatabaseMeta("enfo_bi","Oracle","Native","ip","sid","port","username","password");
///资源库元对象,名称参数,id可以随意定义参数、描述等
KettleDatabaseRepositoryMeta kettleDatabaseMeta =
new KettleDatabaseRepositoryMeta("enfo_bi", "enfo_bi", "king description",dataMeta);
///给资源库赋值
repository.init(kettleDatabaseMeta);
//连接资源库
repository.connect("admin","admin");
////根据变量找到模型所在的目录对象
RepositoryDirectoryInterface directory = repository.findDirectory("/enfo_worker/wxj");
//创建ktr元对象
TransMeta transformationMeta = ((Repository) repository).loadTransformation(transName, directory, null, true, null ) ;
//创建ktr
Trans trans = new Trans(transformationMeta);
//执行ktr
trans.execute(null);
//等待执行完成
trans.waitUntilFinished();
以上两个步骤可以确定为资源库中的路径ktr和我们用命令执行一样。-dir ,-tran -job
附上源码:
package 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.Repository;
import org.pentaho.di.repository.RepositoryDirectoryInterface;
import org.pentaho.di.repository.kdr.KettleDatabaseRepository;
import org.pentaho.di.repository.kdr.KettleDatabaseRepositoryMeta;
import org.pentaho.di.trans.Trans;
import org.pentaho.di.trans.TransMeta;/**
*
Title: java调用kettle4.2数据库数据库中的转换
*
Description:
*
Copyright: Copyright () 2012
*/public classExecuteDataBaseRepTran {private static String transName = "test1";public static voidmain(String[] args) {try{///初始化kettle环境
KettleEnvironment.init()///创建资源库对象,此时对象仍然是空对象
KettleDatabaseRepository repository = newKettleDatabaseRepository();//创建资源库数据库对象,类似我们在spoon创建资源库
DatabaseMeta dataMeta =
new DatabaseMeta("enfo_bi","Oracle","Native","ip","sid","port","username","password");//资源库元对象,名称参数,id可以随意定义参数、描述等
KettleDatabaseRepositoryMeta kettleDatabaseMeta =
new KettleDatabaseRepositoryMeta("enfo_bi", "enfo_bi", "king description",dataMeta);///给资源库赋值
repository.init(kettleDatabaseMeta);//连接资源库
repository.connect("admin","admin");这一步很重要,根据变量找到模型所在的目录对象。
RepositoryDirectoryInterface directory = repository.findDirectory("/enfo_worker/wxj");//创建ktr元对象
TransMeta transformationMeta = ((Repository) repository).loadTransformation(transName, directory, null, true, null) ;//创建ktr
Trans trans = newTrans(transformationMeta);//执行ktr
trans.execute(null);//等待执行完成
trans.waitUntilFinished();if(trans.getErrors()>0)
{
System.err.println("Transformation run Failure!");
}else{
System.out.println("Transformation run successfully!");
}
}catch(KettleException e) {
e.printStackTrace();
}
}
}