废话不多说直接上代码
连接资源库
/**
* @author 小强
* 配置资源库环境 并接连接的资源库
**/
public static Object RepositoryCon() throws KettleException{
//初始化
//EnvUtil.environmentInit();
KettleEnvironment.init();
//数据库连接元对象
DatabaseMeta dataMeta = new DatabaseMeta("ETL", "MS SQL Server", "Native(JDBC)", "127.0.0.1", "ETL", "1433", "sa", "sa");
//数据库形式的资源库元对象
KettleDatabaseRepositoryMeta repInfo = new KettleDatabaseRepositoryMeta();
//
repInfo.setConnection(dataMeta);
//数据库形式的资源库对象
KettleDatabaseRepository rep = new KettleDatabaseRepository();
//用资源库元对象初始化资源库对象
rep.init(repInfo);
//连接到资源库
rep.connect("admin", "admin");//默认的连接资源库的用户名和密码
if(rep.isConnected()){
System.out.println("连接成功");
return rep;
}else{
System.out.println("连接失败");
return null;
}
}
根据jobName调用指定的job
/**
* @author 小强
* 根据指定的资源库对象及job名称 运行指定的job
* */
public static void runJob(KettleDatabaseRepository rep,String jobName){
try{
RepositoryDirectoryInterface dir = rep.findDirectory("/publish/job");//根据指定的字符串路径 找到目录
//加载指定的job
JobMeta jobMeta = rep.loadJob(rep.getJobId(jobName, dir), null);
Job job = new Job(rep, jobMeta);
//设置参数
jobMeta.setParameterValue("method", "update");
jobMeta.setParameterValue("tsm5", "07bb40f7200448b3a544786dc5e28845");
jobMeta.setParameterValue("args", " {'fkid':'07bb40f7200448b3a544786dc5e28845','svctype':'Diffwkrlifehelp','content':'更新3','sysu<span style="white-space:pre"> </span>uid':'01ee0e61f357476b8dbb4be49ddecc77','uid':'1033','role':'3999','posi':'2999'}");
job.setLogLevel(LogLevel.ERROR);
//启动执行指定的job
<span style="color:#ff0000;">job.run()</span>;
job.waitUntilFinished();//等待job执行完;
job.setFinished(true);
System.out.println(job.getResult());
}catch (Exception e) {
e.printStackTrace();
}
}
根据trans名称调用指定的转换
/**
* @author 小强
*
* @param rep 资源库对象
* @param transName 要调用的trans名称
*
* 调用资源库中的trans
*
* */
public static void runTrans(KettleDatabaseRepository rep,String transName){
try{
RepositoryDirectoryInterface dir = rep.findDirectory("/publish/tsf");//根据指定的字符串路径 找到目录
TransMeta tmeta = rep.loadTransformation(rep.getTransformationID(transName, dir), null);
//设置参数
//tmeta.setParameterValue("", "");
Trans trans = new Trans(tmeta);
trans.execute(null);//执行trans
trans.waitUntilFinished();
if(trans.getErrors()>0){
System.out.println("有异常");
}
}catch(Exception e){
e.printStackTrace();
}
}
程序入口
/**
* @author 小强
* 入口
* **/
public static void main(String[] arg) throws KettleException{
Object obj = RepositoryCon();
if(obj!=null){//资源库连接成功
//runJob((KettleDatabaseRepository) obj,"job_lifehelp");//调用指定的job
runTrans((KettleDatabaseRepository) obj, "java_trans_test");//调用指定的tansformation
}
}
解释:
kettle中目录结构如图:
job中参数如图:
所以上文中有:“/publish/job”目录 以及 JobMeta参数args,method,tsm5等值;
DatabaseMeta的配置参照下图: