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" />
我有一个示例输入文件,如下所示。我希望 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" />