记录被处理两次

时间:2017-04-26 22:15:22

标签: spring spring-batch

我们有一个弹簧批次,它可以读取读取器中的一堆数据,处理它并写入它。这一切都是批量发生的。

我注意到处理器和编写器两次查看相同的数据,一次是批处理,一次是单独记录。

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>

1 个答案:

答案 0 :(得分:0)

在使用之前,您应该阅读有关功能的信息。在这里你是正确的,只有在发生错误后才会发生两次处理。

基本上,您已经定义了一个对某些指定异常具有容错能力的块/步骤Configuring Skip Logic

在完全异常计数保持低于skip-limit之前,您的步骤不会失败,但在出现错误时,块项目将被处理两次 - 逐个处理,第二次处理并在第二次处理中跳过坏记录。