12.1 General Notes Spring Batch and JSR-352
Spring Batch 和 JSR-352 在结构上是一致的.
两者的作业(jobs) 都由步骤(step)构成.
都有这些组件: reader, processor, writer, 以及 listener.
但两者的交互略有不同. 例如: Spring Batch 中的 org.springframework.batch.core.SkipListener#onSkipInWrite(S item, Throwable t)
接收2个参数: 忽略的 item 以及 引起 skip的 Exception
. 而 JSR-352 规范中同样的方法, (javax.batch.api.chunk.listener.SkipWriteListener#onSkipWriteItem(List<Object> items, Exception ex)
) 虽然也接受2个参数. 但第一个参数是 List
, 是当前 chunk 中的所有 item, 第二个参赛是引起 skip的 Exception
. 因为有一些差别,所以需要注意在 Spring Batch 中执行 job 有两种途径: 一是常规的 Spring Batch job , 二是基于 JSR-352 的 job. 使用JSR-352’s JSL 配置的 Spring Batch 组件 (readers, writers, etc) ,将通过 JsrJobOperator
来执行, 他们会按照 JSR-352 规定的行为来执行. 还需要注意的是采用 JSR-352 规范开发的 batch 组件, 在常规的 Spring Batch job 中不能正常运行.