我读了that:
在Tasklet实现中完成处理后,您将返回 org.springframework.batch.repeat.RepeatStatus对象。那里有两个 此选项:RepeatStatus.CONTINUABLE和RepeatStatus.FINISHED。 乍看之下,这两个值可能会造成混淆。如果你回来 RepeatStatus.CONTINUABLE,不是说作业可以继续。 您要告诉Spring Batch重新运行Tasklet。说, 例如,您想循环执行一个特定的tasklet 直到满足特定条件为止,但您仍然想使用Spring 批处理以跟踪执行Tasklet的次数, 交易等等。您的tasklet可能会返回 RepeatStatus.CONTINUABLE,直到满足条件为止。如果你回来 RepeatStatus.FINISHED,表示此任务集的处理是 完成(无论成功与否),并继续进行下一部分 处理。
但是我无法想象使用此功能的示例。你能为我解释一下吗?下次何时调用tasklet?
答案 0 :(得分:0)
这使您可以在多个迭代中分解复杂任务的处理。
该功能类似于带有继续/中断功能的while(true)循环。
答案 1 :(得分:0)
比方说,您有大量项目(例如文件),并且您需要以某种方式丰富每个项目,这需要使用外部服务。外部服务可能提供一种分块模式,该模式可以一次处理多达1000个请求,而不是对每个文件进行单独的远程调用。这可能是将整体处理时间降低到所需水平的唯一方法。
但是,这不可能以一种很好的方式使用Spring Batch的Reader / Processor / Writer API来实现,因为Processor是逐项而不是整块地馈送的。实际上只有作家能看到大量的物品。
您可以使用Tasklet来实现此目的,该Tasklet可以读取下一个最多1000个未处理的文件,将分块的请求发送到服务,处理结果,写入输出文件,以及删除或移动已处理的文件。 最后,它检查是否还有更多未处理的文件。取决于它返回的是FINISHED还是CONTINUABLE,在这种情况下,框架将再次调用Tasklet来处理下一个最多1000个文件。 这实际上是一个非常现实的情况,因此我希望可以说明该功能的目的。