ItemReader

虽然概念简单,但ItemReader是提供来自多种不同类型输入数据的途径。最常见的例子包括

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

  • XML:XML ItemReaders独立于用于解析、映射和验证对象的任何技术来处理 XML。输入数据允许根据 XSD 模式验证 XML 文件。

  • 数据库:访问数据库资源以返回结果集,这些结果集可以映射到对象以进行处理。默认的 SQL ItemReader 实现调用RowMapper 来返回对象,跟踪当前行(如果需要重新启动),存储基本统计信息,并提供一些稍后将解释的事务增强功能。

还有更多可能性,但本章重点介绍基本内容。所有可用ItemReader 实现的完整列表可以在附录 A中找到。

ItemReader 是用于通用输入操作的基本接口,如下面的接口定义所示

public interface ItemReader<T> {

    T read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException;

}

read 方法定义了ItemReader 最重要的契约。调用它将返回一个项目,如果不再有项目,则返回null。一个项目可能代表文件中的行、数据库中的行或 XML 文件中的元素。通常预期这些项目将映射到可用的域对象(例如TradeFoo 或其他),但契约中没有要求这样做。

预期ItemReader 接口的实现是单向的。但是,如果底层资源是事务性的(例如 JMS 队列),则在回滚场景中,调用read 可能会在后续调用中返回相同的逻辑项目。还值得注意的是,ItemReader 没有要处理的项目不会导致抛出异常。例如,配置了返回 0 个结果的查询的数据库ItemReader 在第一次调用read 时返回null