【发布时间】:2015-12-30 11:58:38
【问题描述】:
我正在使用 Spring Batch 将项目从 XML 导入数据库。导入后,我创建了包含无效记录的日志。我通过配置可跳过的异常来获得这些项目:
<batch:chunk reader="reader" processor="processor" writer="writer" commit-interval="10" skip-limit="99999999">
<batch:skippable-exception-classes>
<batch:include class="java.lang.Exception"/>
</batch:skippable-exception-classes>
<batch:listeners>
<batch:listener ref="recordSkipListener"/>
<batch:listener ref="itemReadListener"/>
</batch:listeners>
</batch:chunk>
步骤执行后我的日志:
Start time: 30.12.2015 01:05:38
End time: 30.12.2015 01:20:59
Read count: 3842
Skip count: 0
Write count: 3522
通过此表达式计算的跳过计数:
int skipCount = stepExecution.getReadSkipCount() + stepExecution.getProcessSkipCount() + stepExecution.getWriteSkipCount();
“RecordSkipListener”处理处理器和写入器中抛出的所有异常,但它在步骤执行期间从不调用读取、处理和写入方法。仅调用 ChunkListener.afterChunkError 方法,但其参数不包含有关失败记录的信息。 因此我有两个问题:
- 如何记录失败的项目?
- 为什么 Spring Batch 没有实现与 ItemWriter.write 上相同的行为: 失败的块被分成 size=1 的块,然后在专用事务上处理?
// 更新
即使我将块大小减小到 1,也不会写入大约 50 条记录。而且我无法记录他们。
【问题讨论】:
标签: java xml spring-batch chunks