Spring批处理编写器,处理器在跳过时调用了两次?

时间:2012-08-07 17:30:59

标签: spring-batch

我有一个关于跳过的非常基本的问题。我正在使用spring样本提供的spring-batch-simple-cli项目,并尝试理解跳过行为。这有一个非常基本的示例读取器,它从一个字符串数组中读取(我已将其修改为从Hellowworld 1到Hellowworld 10的10个字符串列表中读取)和一个记录到控制台的基本编写器。 writer会在每次写入时抛出java.lang.Exception。 我已将跳过限制为4添加到作业配置中。一旦它到达Hellowworld 5,工作就会按预期停止。 但是每当作家抛出异常时,作者就会立即使用相同的项目回叫。我的问题为什么作家被叫了两次?我期待这个项目被跳过?有什么我想念的。

<job id="job1" xmlns="http://www.springframework.org/schema/batch" incrementer="jobParametersIncrementer">
    <step id="step1" parent="simpleStep">
        <tasklet>
            <chunk reader="reader" writer="writer" skip-limit="4" >
                <skippable-exception-classes>
                    <include class="java.lang.Exception" />
                </skippable-exception-classes>
            </chunk>
        </tasklet>
    </step>
</job>

1 个答案:

答案 0 :(得分:2)

这很可能是由默认功能引起的,其中spring批处理回滚块并重试每个块项(在这种情况下只有一个项)。

https://stackoverflow.com/a/6730807/1627688