ItemStream

ItemReaderItemWriter 各自都很好地完成了它们的功能,但它们之间有一个共同的关注点,这需要另一个接口。通常,作为批处理作业范围的一部分,读取器和写入器需要打开、关闭,并且需要一种持久化状态的机制。ItemStream 接口正是为了实现这个目的,如下例所示

public interface ItemStream {

    void open(ExecutionContext executionContext) throws ItemStreamException;

    void update(ExecutionContext executionContext) throws ItemStreamException;

    void close() throws ItemStreamException;
}

在描述每个方法之前,我们应该提一下 ExecutionContext。实现了 ItemStreamItemReader 客户端应该在任何调用 read 之前调用 open,以便打开文件等资源或获取连接。类似的限制也适用于实现了 ItemStreamItemWriter。正如第2章所述,如果在 ExecutionContext 中找到预期数据,它可以用作从非初始状态的位置启动 ItemReaderItemWriter。相反,调用 close 是为了确保在 open 期间分配的任何资源都被安全释放。调用 update 主要为了确保当前持有的任何状态都加载到提供的 ExecutionContext 中。此方法在提交之前调用,以确保当前状态在提交前持久化到数据库中。

ItemStream 客户端是 Step (来自 Spring Batch Core) 的特殊情况下,会为每个 StepExecution 创建一个 ExecutionContext,以允许用户存储特定执行的状态,并期望如果再次启动相同的 JobInstance,该状态会被返回。对于熟悉 Quartz 的用户来说,其语义与 Quartz 的 JobDataMap 非常相似。

© . This site is unofficial and not affiliated with VMware.