如何在Talend中实现tLoop?

时间:2018-11-13 22:28:45

标签: talend

我是Talend的新手,需要一个示例工作来实现VALIDATOR=$( # replace " with \" sed 's/\"/\\\"/g' /tmp/schema-validator.json | # delete newlines tr -d '\n' | # squeeze spaces (delete all but one space) tr -s ' ') 。如果作业失败,我想运行10次。我看了看文档,但似乎无法弄清楚。

1 个答案:

答案 0 :(得分:3)

此答案包括2个部分

  1. 使用tJava创建循环

  2. 对失败的数据源重新连接5次(添加 tJavaFlex

___________________________________

第1部分:使用tJava创建循环

-------------------------------------------- ---------------

我只是编写了一个tJava组件,然后迭代为false。 像这样

步骤1:创建上下文变量

enter image description here

步骤2:用tJava(tJava1)编写一些Java代码

// setting loop flag
context.continueLooping = true;
//log.info("Starting job...");

然后连接On Component Ok

enter image description here

步骤3:创建循环

在循环条件下放置您的上下文context.continueLooping 在第一次迭代中应该是正确的。

enter image description here

然后迭代

enter image description here

到下一个tJava(tJava2)

if ( ((Integer)globalMap.get("tLoop_1_CURRENT_ITERATION")) == 1)
{
   // code

}
else if(((Integer)globalMap.get("tLoop_1_CURRENT_ITERATION")) == 2) 
{
   // code

}
else if (((Integer)globalMap.get("tLoop_1_CURRENT_ITERATION")) == 3)
{
   // code

}
else if (((Integer)globalMap.get("tLoop_1_CURRENT_ITERATION")) == 4)
{
   // code

}
else if (((Integer)globalMap.get("tLoop_1_CURRENT_ITERATION")) == 5)
{
   // code

   context.continueLooping = false;
  // log.info("DONE");
}

else 
{
   context.continueLooping = false;
  // log.error("out of bounds...");

} 

此tJava为每次迭代运行不同的代码,直到达到5 我用这个区域来计算东西,并将价值加载到其他上下文中等等。

然后它将嵌套部分运行n次,直到上下文值设置为false。

enter image description here

___________________________

第2部分:重试失败的连接

___________________________

如果您需要重试数据库连接。

像这样在tLoop1和tJava2之间添加一个tJavaFlex

enter image description here

,并在3个部分中添加以下代码 开始:

// start part of your Java code
try{   

主要:

// here is the main part of the component,
// a piece of code executed in the row
// loop
if ( ((Integer)globalMap.get("tLoop_1_CURRENT_ITERATION")) > 1)
{
Thread.sleep(10000);
}

结束:

// end of the component, outside/closing the loop
}catch (Exception e) {

if ( ((Integer)globalMap.get("tLoop_1_CURRENT_ITERATION")) > 5)
{
context.continueLooping = false;
}
else
{
System.out.println("Connection failed. Retrying...next");
}


}      

并向On Component Ok tJava添加代码,以在成功执行(tJava3)时停止循环

context.continueLooping = false;