Spring批处理:实现了SkipListener - 但onSkipInWrite()方法为整个批处理抛出相同的消息

时间:2012-12-26 21:29:41

标签: spring-batch

我正在开发Spring Batch:我正在从FlatFile读取数据并使用Jdbc连接将从文件读取的记录保存到数据库。在执行此操作时,我已配置了一个侦听器,如果在读取或写入数据时生成错误,则会调用该侦听器。我将10条记录上传到数据库中,其中2条记录有错误。它正在根据需要正确插入8个记录,但是onSkipInWrite()方法没有给出实际被跳过的2个记录,但是它打印出整个10个记录的批次,并且具有相同的例外。我应该如何筛选出哪些记录没有被跳过,实际上该方法会说明您将获得整批中跳过的确切记录。请帮助我....等待回应.....谢谢

在Audit.xml中配置 示例示例:

<step id="step1" >
        <tasklet allow-start-if-complete="true">
            <chunk reader="Reader" writer="Writer" commit-interval="10" skip-limit="10">
                <skippable-exception-classes>
                    <include class="java.lang.Exception" />
                </skippable-exception-classes>
            </chunk>
            <listeners>
                <listener ref="Listener" />
            </listeners>
        </tasklet>
    </step>

我在下面写了一个Listener类是示例:

public class Listener implements SkipListener {


    @Override
    public void onSkipInProcess(Object item, Throwable throw) {
        System.out.print ("Error in the record :" + item.gettoString() + " Type of Error : " + throw.getClass());

    }

    @Override
    public void onSkipInRead(Throwable throw) {
    }

    @Override
    public void onSkipInWrite(Object item, Throwable throw) {

     System.out.print ("Error in the record :" + item.gettoString() + " Type of Error : " + throw.getClass());

}

} 

1 个答案:

答案 0 :(得分:0)

而不是skip-limit="10"

使用

                <batch:skip-policy>
                    <bean class="org.springframework.batch.core.step.skip.AlwaysSkipItemSkipPolicy" scope="step"/>
                </batch:skip-policy>