我记得我会定期调用ItemWriter.write()
。这是什么意思?是否每隔x
毫秒调用一次,其中x
是一个可配置的常量?或者它是否每个n
项都被调用?如果一个处理器线程被阻塞等待某个条件并且尚未到达n
会发生什么情况,并且它是唯一剩下的待处理项目?是否调用了作者?
我遇到处理器需要等待写入另一个项目以确保处理完整性的情况。无论情况如何(处理器在等待,在process()
方法中被阻止),我可以依赖于被调用的编写器吗?
编辑:
我的问题是,当检测到满足特定条件(不能提供太多细节)的另一个待处理项目(尚未写入)时,某些项目需要延期。处理器应该等到写入其他项目。当编写器等待到达提交项计数时,会出现问题,并且一个或多个处理器正在等待写入的处理项,从而产生死锁。如果有一种显式刷新编写器的方法(或设置调用编写器的超时,即使尚未达到项目计数),我的问题也将得到解决。
答案 0 :(得分:0)
运行writer之前处理的项目数是“commit-interval' (在您的xml作业配置上)。
ItemWriter实现将使用ItemProcessor方法的结果。 当然,如果正在等待位于同一块中的项目,则可以永久阻止已处理的项目。
您能否向我们提供有关您问题的更多详情?
答案 1 :(得分:0)
Spring Batch的项目处理不适用于您正在尝试的内容。我们要么按顺序提供正在处理的所有内容(不能承受容错的情况),要么不保证订单(通过各种多线程选项)。从您描述的场景中,您确实有两个选择:
Tasklet
界面就在那里。如果Spring Batch提供的模式之一不能满足您的需求,您可以将自己的逻辑写入自己的Tasklet
。