Spring batch Spring批处理-在处理器跳过时禁用ItemReader缓存,并再次处理筛选的行
我已经使用springbatch一段时间了,今天我尝试增强我的批处理,使它们更加防弹。所以我启用了.fault容错和.skipLimit/.skip,但没有启用任何重试策略 几乎所有批处理都有一个读卡器(从数据库读取数据的JpaPagingItemReader)、一个处理器和一个创建XML文件的编写器。这三个部分都在一个步骤中,我的块大小通常在50左右 我注意到当发生可跳过的异常时有两个副作用,我想知道是否有办法更改这些默认行为=>Spring batch Spring批处理-在处理器跳过时禁用ItemReader缓存,并再次处理筛选的行,spring-batch,Spring Batch,我已经使用springbatch一段时间了,今天我尝试增强我的批处理,使它们更加防弹。所以我启用了.fault容错和.skipLimit/.skip,但没有启用任何重试策略 几乎所有批处理都有一个读卡器(从数据库读取数据的JpaPagingItemReader)、一个处理器和一个创建XML文件的编写器。这三个部分都在一个步骤中,我的块大小通常在50左右 我注意到当发生可跳过的异常时有两个副作用,我想知道是否有办法更改这些默认行为=> 我通常在我的阅读器中读取JPA实体,将它们发送到我的处理器,在
我看不出有什么明显的办法可以改变这一点。我想这是从一开始(看看上次的修改日期)。但这对我来说是有意义的,如果一个项目被过滤了,为什么要重新处理它呢?无论如何,此项都将重新筛选,除非处理器不是幂等的。
因此我启用了.faultlerant和.skipLimit/.skip,但我没有启用任何重试策略。
:SkipPolicy和RetryPolicy在容错步骤的上下文中是不同的。您是否尝试过使用.retry/.retryLimit
有没有办法禁用ItemReader的缓存
:我想这就是您要查找的内容(尽管名称中有“队列”)。你试过了吗?非常感谢你的回答!跳过比重试更适合我:)但ReaderistransaConationalQueue似乎正是我想要的,我会尝试一下,谢谢!你对第二个问题(过滤元素被忽略)有什么想法吗不客气。我为这两个问题添加了更详细的答案。希望对您有所帮助。谢谢您提供更详细的答案!我想重新处理过滤后的项目,因为我仍然对这些项目执行操作。至少我在报表表中插入一行,表示该项已被过滤。有时我仍然在数据库中写入一些数据,比如更新上次查看的日期。如我所见(以及在我实现批处理时),读取器负责读取数据,处理器负责处理数据(包括编辑DB数据),而writer负责生成输出,在我的例子中,主要是XML文件。当然,按原样实现并跳过过滤项是有意义的,但我认为,如果启用容错,我希望批处理能够像以前一样运行,但不读取第一次传递时生成错误的元素,这也是有道理的。为此,我需要启用readerTransactionalQueue,并且需要另一个标志来启用对过滤项的处理。如果你认为我的观点是正确的,并且这样的标志可以添加到Spring批处理中,那么你会让我成为最快乐的人:-)否则我会自己调整,有一个类似的标志用于名为的处理器。你试过了吗?根据文档,它似乎并没有达到我想要的效果,因为如果我禁用它(默认情况下是启用的),Spring批处理将不会在跳过的情况下再次处理。我需要的是Spring批处理再次处理所有内容(除了错误):-)是的,我感谢您宝贵的时间:-)我将看看我是否可以调整批处理,或者我是否可以请求项目的功能,或者可能做PR!