ItemReader

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

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

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

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

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

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