我们有一个弹簧批次,它可以读取读取器中的一堆数据,处理它并写入它。这一切都是批量发生的。
我注意到处理器和编写器两次查看相同的数据,一次是批处理,一次是单独记录。
for ex:writer读取1000条记录,向处理器发送1000条记录,向作者发送1000条记录。
此后,记录会再次被单独处理,但只会调用处理器和编写器。
我们在所有阅读器,处理器和编写器中都有日志语句,我可以看到日志。
是否有任何条件可以使记录在作为列表处理后单独处理?
<batch:job id="feeder-job">
<batch:step id="regular">
<tasklet>
<chunk reader="feeder-reader" processor="feeder-processor"
writer="feeder-composite-writer" commit-interval="#{stepExecutionContext['query-fetch-size']}"
skip-limit="1000000">
<skippable-exception-classes>
<include class="java.lang.Exception" />
<exclude class="org.apache.solr.client.solrj.SolrServerException"/>
<exclude class="org.apache.solr.common.SolrException"/>
<exclude class="com.batch.feeder.record.RecordFinderException"/>
</skippable-exception-classes>
</chunk>
<listeners>
<listener ref="feeder-reader" />
</listeners>
</tasklet>
</batch:step>
</batch:job>
答案 0 :(得分:0)
在使用之前,您应该阅读有关功能的信息。在这里你是正确的,只有在发生错误后才会发生两次处理。
基本上,您已经定义了一个对某些指定异常具有容错能力的块/步骤Configuring Skip Logic
在完全异常计数保持低于skip-limit
之前,您的步骤不会失败,但在出现错误时,块项目将被处理两次 - 逐个处理,第二次处理并在第二次处理中跳过坏记录。