结合网上的资料参考。转换没有达到我想要的结果自己总结下实现了。
注:需要的包kettle lib 下面都有kettle 打头的基本都要.
Kettle6.0下测试的
调用转换传参 不传参的话直接传null
Stringpath =application.getRealPath("/kettle/voucher.ktr");
SimpleDateFormatdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String[]params = {"1","15"};
String paramurl = "file:///E:/kettle/Aaa";
Map<String,String>para = new HashMap<String,String>();
para.put("strurl",paramurl);
try{
KettleEnvironment.init(); //初始化
//EnvUtil.environmentInit(); 不使用
TransMeta transMeta = new TransMeta(path);
Trans trans = new Trans(transMeta); //创建转换
for(Map.Entry<String,String>entry: para.entrySet() )
{
//设置命名参数
trans.setParameterValue(entry.getKey(),entry.getValue());
}
trans.execute(params); //执行转换设置 命令行参数
trans.waitUntilFinished(); //等待转换执行结束
if(trans.getErrors() >0)
{
throw new Exception("转换过程中发生异常!");
}
}catch(Exception e){
e.printStackTrace();
}
不知道怎么上图片。 说明下好了
转换文件
第一步
名称 类型
id1 命令行参数1
id2 命令行参数2
第二步
变量已 ? 如 where id > ? and id < ? /按顺序 id1 id2
下面要选择替换SQL 语句变量。
从步骤插入数据 就是 第一步的 获取系统信息
第三步
文本文件输出 文件名称 变量 ${strurl}
注意 这个命名变量必须双击空白处转换属性添加一个命名参数 strurl
调用作业传参 不传参的话直接传null
Stringpathjob =application.getRealPath("/kettle/jobone.kjb");
Stringstrpath = request.getRealPath("") +"/kettle";
System.out.println(strpath);
SimpleDateFormatdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String[] params = {"1","15"};
try{
KettleEnvironment.init(); //初始化
JobMeta jobMeta = new JobMeta(pathjob,null);
Job job = new Job(null,jobMeta);
//向JOB 脚步传递参数
job.setVariable("strurl","vouone.ktr");
job.setVariable("id1","1");
job.setVariable("id2","15");
job.start();
job.waitUntilFinished();
if(job.getErrors() >0)
{
throw new Exception("作业过程中发生异常!");
}
}catch (Exception e){
e.printStackTrace();
}
作业文件
这里只需要看第二步 直接${} 就能接受参数无需设置全局命名变量
然后转换文件的话
就是 where id > ${id1} and id < ${id2}