结合网上的资料参考。转换没有达到我想要的结果自己总结下实现了。

注:需要的包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";

Mappara = new HashMap();

para.put("strurl",paramurl);

try{

KettleEnvironment.init(); //初始化

//EnvUtil.environmentInit();不使用

TransMeta transMeta = new TransMeta(path);

Trans trans = new Trans(transMeta); //创建转换

for(Map.Entryentry:  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}

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐