ItemReader

虽然是一个简单的概念,但ItemReader 是从多种不同类型的输入提供数据的手段。最通用的示例包括:spring-doc.cadn.net.cn

  • 平面文件:平面文件项读取器从平面文件中读取数据行,这些文件通常描述具有字段的记录,字段由文件中的固定位置定义或由某些特殊字符(如逗号)分隔。spring-doc.cadn.net.cn

  • XML:XML ItemReaders 独立于用于解析、映射和验证对象的技术来处理 XML。输入数据允许针对 XSD 架构验证 XML 文件。spring-doc.cadn.net.cn

  • 数据库:访问数据库资源以返回结果集,这些结果集可映射为对象进行处理。默认的 SQL ItemReader 实现会调用 RowMapper 来返回对象,在需要重启时跟踪当前行,存储基本统计信息,并提供一些事务增强功能(稍后将详细说明)。spring-doc.cadn.net.cn

还有更多可能性,但本章我们专注于基本内容。所有可用的 ItemReader 实现的完整列表可在 附录 A 中找到。spring-doc.cadn.net.cn

ItemReader 是一个用于通用输入操作的基本接口,如下面的接口定义所示:spring-doc.cadn.net.cn

public interface ItemReader<T> {

    T read() throws Exception;

}

read 方法定义了 ItemReader 最核心的契约。调用它会返回一个条目,如果没有更多条目则返回 null。条目可以代表文件中的一行、数据库中的一行或 XML 文件中的一个元素。通常期望将这些条目映射为可用的领域对象(例如 TradeFoo 或其他对象),但契约中并不强制要求这样做。spring-doc.cadn.net.cn

预计 ItemReader 接口的实现是仅向前进行的。 然而,如果底层资源是事务性的(例如 JMS 队列),那么在回滚场景中,调用 read 可能在后续调用中返回相同的逻辑项。还值得注意的是,ItemReader 没有要处理的项目并不会导致抛出异常。例如,配置了返回 0 条结果查询的数据库 ItemReader,在首次调用 read 时会返回 nullspring-doc.cadn.net.cn