ItemStream

两者都很好地服务于各自的目的,但有一个 他们俩都关心需要另一个接口。一般来说,作为 作为批处理作业范围的一部分,读取器和写入器需要打开、关闭,并且 需要一种持久化状态的机制。该接口用于此目的, 如以下示例所示:ItemReadersItemWritersItemStreamspring-doc.cn

public interface ItemStream {

    void open(ExecutionContext executionContext) throws ItemStreamException;

    void update(ExecutionContext executionContext) throws ItemStreamException;

    void close() throws ItemStreamException;
}

在描述每种方法之前,我们应该提到 .同时实现的 的 客户端应在对 进行任何调用之前调用 ,以便打开任何资源(如文件)或获取连接。类似的 限制适用于实现 .如 第 2 章,如果在 中找到了预期的数据,则可以用来启动 或位于其初始状态以外的位置。相反,调用以确保安全释放 open 期间分配的任何资源。 主要是为了确保当前持有的任何状态都加载到 提供的 .此方法在提交之前调用,以确保 当前状态在提交之前保留在数据库中。ExecutionContextItemReaderItemStreamopenreadItemWriterItemStreamExecutionContextItemReaderItemWritercloseupdateExecutionContextspring-doc.cn

在特殊情况下,an 的客户端是 (来自 Spring Batch Core),为每个 StepExecution 创建一个,以允许用户 存储特定执行的状态,如果 同样的事情又开始了。对于熟悉 Quartz 的人来说,语义 与 Quartz 非常相似。ItemStreamStepExecutionContextJobInstanceJobDataMapspring-doc.cn