ItemReader
ItemReader
尽管概念简单,但 ItemReader 是从多种不同类型输入源提供数据的方式。最常见的示例包括:
-
平面文件:平面文件条目读取器从平面文件中读取数据行,这些文件通常通过文件中固定的位置或由某种特殊字符(如逗号)分隔来描述包含数据字段的记录。
-
XML:XML
ItemReaders独立于用于解析、映射和验证对象的技术来处理 XML。输入数据允许根据 XSD 模式验证 XML 文件。 -
数据库:访问数据库资源以返回结果集,这些结果集可以映射到对象进行处理。默认的 SQL
ItemReader实现会调用RowMapper来返回对象,如果需要重新启动,则跟踪当前行,存储基本统计信息,并提供一些稍后解释的事务增强功能。
当然,本章我们主要关注基础类型。所有可用的 ItemReader 实现完整列表,请参阅附录 A。
ItemReader 是一个用于通用输入操作的基础接口,如下接口定义所示:
public interface ItemReader<T> {
T read() throws Exception;
}
read 方法定义了 ItemReader 最核心的契约。调用该方法会返回一个数据项,如果没有更多数据项则返回 null。一个数据项可以代表文件中的一行、数据库中的一条记录,或是 XML 文件中的一个元素。通常期望将这些数据映射为可用的领域对象(例如 Trade、Foo 或其他类型),但契约中并未强制要求这样做。
预期 ItemReader 接口的实现是仅向前读取的。然而,如果底层资源是事务性的(例如 JMS 队列),那么在回滚场景中,后续调用 read 方法可能会返回相同的逻辑项。同样值得注意的是,ItemReader 没有要处理的项并不会导致抛出异常。例如,配置了返回 0 条结果的查询的数据库 ItemReader 在首次调用 read 时会返回 null。