这是我的过程:

您可以在tJava_1中看到Java代码。它解析文件中的数据,如果到达最后一个搜索页面,它将设置为true。这将成为tLoop_1的停止条件,如下所示:

我对Talend变量的处理是否错误?一旦达到Java代码中的条件,如何停止循环运行?

最佳答案

您不需要“声明”或“迭代”值。您想要的是“条件”中的一个变量,该变量是一个布尔值,其值为true,当您要结束循环时将其设置为false

最佳做法是,您应该在运行时或启动子作业时为提供给作业的实际上下文使用上下文变量,然后将globalMap用于单个作业的全局可用变量。

因此,在这种情况下,您应该将设置为true的boolean globalMap变量初始化为true(可以在带有globalMap.put("loop",true)的tJava组件中执行此操作,或使用tSetGlobalVar组件),然后在tJavaRow中,可以通过globalMap.put("loop",false)将globalMap变量设置为false。

如果要使用“loop”作为globalMap变量,则可以在tLoop的“Condition”中使用((Boolean)globalMap.get("loop"))

一个可行的简单示例如下所示:

首先,我们至少希望将循环变量设置为true!

然后,我们将while循环的条件设置为布尔全局变量:

最后,我们在tJava组件中运行一些代码,该代码执行某些操作并将有条件的全局变量设置为false,从而结束循环:

if (((Integer)globalMap.get("tLoop_2_CURRENT_ITERATION")) == 3) {
    globalMap.put("loop", false);
} else {
    System.out.println(((Integer)globalMap.get("tLoop_2_CURRENT_ITERATION")));
};

10-07 19:35