【发布时间】:2020-06-29 10:59:46
【问题描述】:
我们正在构建一个 Spring Batch,它在 Spring Batch 的处理器部分调用第三方 API
要求是当第 3 方 API 不可用时,spring 批处理需要重新尝试指定的阈值限制并中止批处理
我已经尝试使用容错步骤进行弹簧批处理重试,它在单线程程序中运行良好,但是当我们包含 aysncprocessor 和 aysncitemwriter 时并没有停止批处理
请给我一些重试限制/自定义代码示例,说明如何使用 aysncprocessor / asyncitemwriter 在出现任何异常时退出
更新 1-:
我尝试使用 100 的块大小和 5 个 aysnc 线程,重试限制为 3,我看到很少有记录只处理两次,很少处理三次,最后作业失败,ExhaustedRetryException
这是 Spring 批处理的预期行为吗?
更新 2:- 我在论坛上看到很多关于 spring retry 的帖子 spring retry 和 faultTolerant (Spring Batch) step retry 之间的确切区别是什么?
【问题讨论】:
-
@KavithakaranKanapathippillai:这在 aysncprocessor 中不起作用:(
-
it is working fine in a single threaded program but is is not stopping the batch when we include aysncprocessor and aysncitemwriter:既然它工作正常,让我们看看它为什么没有停止。您是否为异步组件使用线程池执行器?如果是,您是否在工作后关闭此线程池? Spring Batch 不会自行关闭线程池。 -
是的,我们正在使用任务执行器,但我们并没有关闭它,我们虽然 SpringApplication.exit(context) 会小心
-
它在单线程程序中运行良好,但是当我们包含 aysncprocessor 和 aysncitemwriter 时并没有停止批处理:这里我的意思是说,即使抛出异常,批处理也会继续处理并且处理器不会退出
标签: java spring spring-batch