ItemReader

尽管概念简单,ItemReader 却是从多种不同类型输入提供数据的一种方法。最常见的示例包括:

  • 纯文本:纯文本项目读取器读取来自纯文本文件的数据行,该文件通常描述了由文件中的固定位置定义的数据域记录或由某些特殊字符(如逗号)分隔的数据域记录。

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

  • 数据库:访问数据库资源以返回可映射为要处理的对象的结果集。默认 SQL ItemReader 实现调用 RowMapper 以便返回对象、在需要重新启动时跟踪当前行、存储基本统计信息并提供稍后解释的某些事务增强。

还有更多可能性,但我们专注于本章中的基础知识。可以在Appendix 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