在Spring-batch中调用ItemWriter的时候?

时间:2014-05-26 11:43:04

标签: spring-batch

我记得我会定期调用ItemWriter.write()。这是什么意思?是否每隔x毫秒调用一次,其中x是一个可配置的常量?或者它是否每个n项都被调用?如果一个处理器线程被阻塞等待某个条件并且尚未到达n会发生什么情况,并且它是唯一剩下的待处理项目?是否调用了作者?

我遇到处理器需要等待写入另一个项目以确保处理完整性的情况。无论情况如何(处理器在等待,在process()方法中被阻止),我可以依赖于被调用的编写器吗?

编辑:

我的问题是,当检测到满足特定条件(不能提供太多细节)的另一个待处理项目(尚未写入)时,某些项目需要延期。处理器应该等到写入其他项目。当编写器等待到达提交项计数时,会出现问题,并且一个或多个处理器正在等待写入的处理项,从而产生死锁。如果有一种显式刷新编写器的方法(或设置调用编写器的超时,即使尚未达到项目计数),我的问题也将得到解决。

2 个答案:

答案 0 :(得分:0)

运行writer之前处理的项目数是“commit-interval' (在您的xml作业配置上)。

ItemWriter实现将使用ItemProcessor方法的结果。 当然,如果正在等待位于同一块中的项目,则可以永久阻止已处理的项目。

您能否向我们提供有关您问题的更多详情?

答案 1 :(得分:0)

Spring Batch的项目处理不适用于您正在尝试的内容。我们要么按顺序提供正在处理的所有内容(不能承受容错的情况),要么不保证订单(通过各种多线程选项)。从您描述的场景中,您确实有两个选择:

  1. 将此分为两个步骤 - 在处理相关项目后,是否有理由无法在第二步中处理延迟的项目?
  2. 推出自己的 - 出于这个原因,Tasklet界面就在那里。如果Spring Batch提供的模式之一不能满足您的需求,您可以将自己的逻辑写入自己的Tasklet