【发布时间】:2015-06-04 14:53:41
【问题描述】:
我正在使用 Spring 批处理 JDBCCursorItemReader 从表中读取一组数据。读取数据后,spring batch 将处理块中的每一行(读取器、处理器、写入器)。现在我想更新/删除我的读者获取的那些记录,以避免被同一作业的另一个实例重新处理。有人可以告诉我如何在阅读器中做到这一点吗?
谢谢
【问题讨论】:
-
你不要在阅读器中这样做,那只是为了阅读......你想在你的编写器中这样做,也许是一个自定义块侦听器。
-
但是我想在我的阅读器获取这些记录后立即更新/删除,而不是在处理后,因为编写器只有在处理后才会执行,我可以为此使用编写器吗?
-
当操作失败时你会怎么做?您的记录已被标记为已处理,但尚未处理……那又如何?此外,它仅在事务提交后才可见,并且您不希望每条记录都有一个事务,因为这会影响您的性能。不允许作业的多个实例不是更容易解决吗?
-
感谢回复。根据我的要求,我需要运行同一作业的多个实例,所以我想将输入行更新为中间状态,其他实例不会处理。如果步骤/作业失败,我将更新回初始状态,以便其他实例重新处理。如果我使用块侦听器,我可以让 itemreader 一次读取所有记录以更新到中间状态吗?
-
为什么要同时运行同一个作业的多个实例来处理相同的数据?有更好的方法可以在单个作业实例中协调数据的并行处理,以防止此类问题(分区等)。
标签: spring spring-batch