在生成的xml文件中默认指定了一个初始化参数值,然后在run时动态传入实际值,却不起作用,纠结了老多时间,终于发现解决法了。过程阐述如下,做一个记录,也为遇到同样问题的朋友提供帮助。
在生成job文件时,设置一个参数,并附默认值,代码如下:
// 若为增量,需要添加增量参数
if (incr != null && incr.equals("1")) {
try {
jobMeta.addParameterDefinition("v_date", "to_date('19000101','yyyymmdd')", "增量时间");
} catch (DuplicateParamException e) {
e.printStackTrace();
}
}
效果如下:
然后在run作业的时候,动态传入参数值:
if(schType!="0"){//若为非全量,需要设置时间参数
try {
job.getJobMeta().setParameterValue("v_date", "to_date('"+beginDate+"','yyyymmdd')");
} catch (UnknownParamException e1) {
e1.printStackTrace();
}
}
如上这样的写法就是正确的。
但是,如果你写成job.setParameterValue("v_date", "to_date('"+beginDate+"','yyyymmdd')");那么打死也传不进去值。
我就纳闷了,kettle这个Job对象中的方法做嘛用的,误导人。。
经过这段时间对kettle api的研究,发现kettle核心其实做的还是挺粗糙的,api更粗糙,bug也多。。。。。