在Spring批处理中调用ItemProcessor

我创建了 spring 批处理,它从平面文件读取并使用ItemProcessor处理数据,然后使用ItemWriter在DB中写入,所以一切正常 .

问题现在我需要控制“ Process ”方法被调用来处理数据的次数,我的itemprocessor调用一些带有详细信息的API,API需要一些时间来响应(不确定超时),因此,我应该不要使用新消息重载API . 我需要控制对API的调用,例如 X number of call in y Sec 如果到达,我需要在恢复活动之前等待 Z sec .

我不知道如何在spring批处理中实现这一点,我正在寻找在处理器中实现chunklistener来跟踪调用 . 但是,我正在寻找更好的方法 .

回答(1)

2 years ago

您不需要侦听器来执行此操作 .

如果您没有在stop中定义异步taskexecutor,那么整个处理将完全按顺序进行 .

它将读取一个项目,处理一个项目,读取下一个项目,处理它直到它读取并处理你在commitsize中定义的项目( - >你的块的大小) . 之后,它会将这些项目放入列表并将此列表转发给作者 . 将执行此过程,直到读取,处理并最终写入所有元素 .

如果您想并行处理您的块,那么您可以定义一个异步的taskexecutor .

如果在步骤中定义AsyncTaskExeutor,则可以配置此TaskExecutor管理/创建的线程数 . 此外,您还可以定义步骤的限制限制,该限制定义了可以并行处理的块数 .