前言
开发过程中遇到了个情况,从数据库中取出的每一条数据,都需要加上时间戳生成签名,然后去作为请求头请求数据。然而当数据量过大时,由于每条数据都要花费几十毫秒到几十秒不定的时间。所以就会导致到后面的数据发请求时,签名已经过期了。
解决思路
kettle中的变量是一个超出数据流之外的存在。想到能否通过操作变量,来为每一条数据设置一个预设的时间戳,让时间戳形成步长3000的序列。
可以通过kettle中的java脚本,调用getVariable函数获取到变量,再通过setVariable将更改后的变量设置回去。
示例
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
Object[] r = getRow();
if (r == null) {
setOutputDone();
return false;
}
r = createOutputRow(r, data.outputRowMeta.size());
// 获取变量
String getVariable = getVariable("data", "");
// 处理变量
int test = Integer.parseInt(getVariable);
test++;
// 将变量设置回去
setVariable("data",""+test);
get(Fields.Out, "filename").setValue(r, ""+test);
// 将数据返回给下一个节点
putRow(data.outputRowMeta, r);
return true;
}


Comments | NOTHING