Spring Batch为读取XML映射为Java对象以及将Java对象写为XML记录提供了事务基础。
[注意]XML流的限制 StAX API 被用在其他XML解析引擎不适合批处理请求 I/O 时的情况(DOM方式把整个输入文件加载到内存中, 而SAX方式在解析过程中需要用户提供回调)。
让我们仔细看看在Spring Batch中 XML输入和输出是如何运行的。 首先,有一些不同于文件读取和写入的概念,但在Spring Batch XML处理中是很常见的。在处理XML时, 并不像读取文本文件(FieldSets)时采取分隔符标记逐行读取的方式, 而是假定XML资源是对应于单条记录的文档片段('fragments
')的集合:
图 3.1: XML 输入文件
“trade
”标签在上面的场景中是根元素“root element”。 在'<trade>
'和'</trade>
'之间的一切都被认为是一个 文档片段'fragment
'。 Spring Batch使用 Object/XML映射(OXM)将 fragments 绑定到对象。 但 Spring Batch 并不依赖某个特定的XML绑定技术。 Spring OXM 委托是最典型的用途, 其为常见的OXM技术提供了统一的抽象。 Spring OXM 依赖是可选的, 如有必要,你也可以自己实现 Spring Batch 的某些接口。 OXM支持的技术间的关系如下图所示:
图 3.2: OXM Binding
上面介绍了OXM以及如何使用XML片段来表示记录, 接着让我们仔细了解下 readers 和 writers 。