|
当前版本仍在开发中,尚不被视为稳定版本。最新稳定版请使用 Spring Batch 文档 6.0.2! |
ItemReader
虽然概念很简单,但 ItemReader 是一种可以从多种不同输入源提供数据的机制。最常见的例子包括:
-
平面文件:平面文件 item reader 从平面文件中逐行读取数据。文件中的记录通常要么通过固定位置来定义字段,要么通过某种特殊分隔符(例如逗号)来划分字段。
-
XML:XML
ItemReader可以处理 XML,而不依赖于具体使用哪种解析、映射和对象校验技术。输入数据还支持基于 XSD 模式对 XML 文件进行校验。 -
数据库:访问数据库资源以返回结果集,再把结果集映射为可供处理的对象。默认的 SQL
ItemReader实现会调用RowMapper来返回对象;如果需要重启,还会跟踪当前行位置、保存基础统计信息,并提供一些后面会介绍的事务增强能力。
当然还有更多可能性,但本章只聚焦于基础类型。所有可用的 ItemReader 实现完整清单可参见
附录 A。
ItemReader 是一个用于通用输入操作的基础接口,其定义如下:
public interface ItemReader<T> {
T read() throws Exception;
}
read 方法定义了 ItemReader 最核心的契约。调用它时,会返回一个 item;如果已经没有更多 item,则返回 null。
一个 item 可以表示文件中的一行、数据库中的一行记录,或者 XML 文件中的一个元素。通常期望这些内容会被映射成可用的领域对象
(例如 Trade、Foo 等),但接口契约本身并不强制要求这样做。
通常期望 ItemReader 的实现是只向前读取的。不过,如果底层资源具备事务特性(例如 JMS 队列),那么在发生回滚时,
后续再次调用 read 时,可能会返回同一个逻辑 item。还需要注意的是,ItemReader 没有可处理数据时不会抛出异常。
例如,一个数据库 ItemReader 如果配置的查询返回 0 条结果,那么第一次调用 read 时就会返回 null。