Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring batch 在spring批处理中,何时调用ItemWriter?_Spring Batch - Fatal编程技术网

Spring batch 在spring批处理中,何时调用ItemWriter?

Spring batch 在spring批处理中,何时调用ItemWriter?,spring-batch,Spring Batch,我记得读到过,ItemWriter.write将定期调用。这是什么意思?它是否每x毫秒调用一次,其中x是一个可配置常量?还是每n个项目调用一次?如果一个处理器线程在等待某个条件时被阻塞,而n还未达到,并且它是唯一剩下的挂起项,会发生什么情况?写入程序是否被调用 我有一个例子,处理器需要等待另一个项目被写入,以确保处理的完整性。当处理器在进程方法中等待、阻塞时,我是否可以依赖被调用的编写器,而不管这种情况如何 编辑: 我的问题是,当检测到另一个未写入且满足特定条件的挂起项不能提供太多细节时,某些项

我记得读到过,ItemWriter.write将定期调用。这是什么意思?它是否每x毫秒调用一次,其中x是一个可配置常量?还是每n个项目调用一次?如果一个处理器线程在等待某个条件时被阻塞,而n还未达到,并且它是唯一剩下的挂起项,会发生什么情况?写入程序是否被调用

我有一个例子,处理器需要等待另一个项目被写入,以确保处理的完整性。当处理器在进程方法中等待、阻塞时,我是否可以依赖被调用的编写器,而不管这种情况如何

编辑:


我的问题是,当检测到另一个未写入且满足特定条件的挂起项不能提供太多细节时,某些项需要延迟。处理器应等待其他项写入。当写入程序正在等待达到提交项计数,而一个或多个处理器正在等待写入已处理的项时,就会出现此问题,这会造成死锁。如果有一种方法可以显式刷新写入程序或设置调用写入程序的超时,即使尚未达到项目计数,我的问题也会得到解决。

在xml作业配置中,运行写入程序之前处理的项目数为“提交间隔”

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


您能为我们提供有关您的问题的更多详细信息吗?

Spring Batch的项目处理不适用于您的尝试。我们要么提供正在处理的一切,以确保容错案例不受影响,要么通过各种多线程选项无法保证订单。根据您描述的场景,您确实有两个选择:

将其分为两个步骤-在处理依赖项之后,是否有理由不能在第二个步骤中处理延迟项? 你自己动手吧——Tasklet界面就是出于这个原因而存在的。如果SpringBatch提供的模式之一不能满足您的需要,您可以将自己的逻辑写入自己的Tasklet。
我的问题是,当检测到另一个未写入且满足特定条件的挂起项不能提供太多细节时,某些项需要延迟。处理器应等待其他项写入。当写入程序正在等待达到提交项计数,而一个或多个处理器正在等待写入已处理的项时,就会出现此问题,这会造成死锁。如果有一种方法可以显式刷新写入程序或设置调用写入程序的超时(即使尚未达到项目计数),则我的问题将得到解决。您可以将提交间隔设置为1,但会降低效率。或者您可以实现自己的处理器或写入程序来控制流程。我不能牺牲效率。我想为编写器和处理器定制的东西太复杂了,我不喜欢。我们使用SpringBatch来简化并行化,我只需要一种机制来延迟SpringBatch似乎没有提供的某些项目。我可以控制编写器做什么和处理器做什么,但我几乎无法控制它们何时被调用。