Spring 批量读取并在 xml 列表(而不是整个文件)失败时重试

Spring Batch to read and retry on failuire over a xml list(and not entire file)

我有一个示例输入文件,如下所示。我希望 spring 批处理它并重试异常。但是,处理和重试不应在整个输入上进行,而应在列表(记录)级别进行。例如,在处理记录 1001、1002 和 1003 时,如果 1002 失败,则 spring 批处理应重试 3 次,然后再进行 1003。

<company>
    <record refId="1001">
        <name>mkyong</name>
        <age>31</age>
        <dob>31/8/1982</dob>
        <income>200,000</income>
    </record>


<record refId="1002">
        <name>kkwong</name>
        <age>30</age>
        <dob>26/7/1983</dob>
        <income>100,999</income>
    </record>

    <record refId="1003">
        <name>joel</name>
        <age>29</age>
        <dob>21/8/1984</dob>
        <income>1,000,000</income>
    </record>
   . . . . . . 
</company>

Spring批量配置。

parent="basedStep">
        <batch:description>For sending out alerts</batch:description>
        <tasklet>
        <chunk reader="cam.ingestedFile.reader" processor="cam.ingestion.pps.processor" retry-limit="3" commit-interval="1" skip-limit="${batch.tolerance.skip.limit}" > 

             <skippable-exception-classes>
                <include class="com.cam.exception.EBNoAcknowledgementException"/>                   
            </skippable-exception-classes>      
            <retryable-exception-classes>
                <include class="com.cam.exception.EBNoAcknowledgementException"/>
            </retryable-exception-classes>
        </chunk>        
            <transaction-attributes isolation="READ_COMMITTED" ></transaction-attributes>
        </tasklet>

    </batch:step>

将 reader 修改为以下并且有效:

<bean id="cam.ingestedFile.reader"class="org.springframework.batch.item.xml.StaxEventItemReader">
    <property name="fragmentRootElementName" value="record" />