跳到主要内容

ItemStream

QWen Plus 中英对照 ItemStream ItemStream

ItemReaderItemWriter 都很好地实现了各自的用途,但它们之间有一个共同的关注点,需要另一个接口来解决。通常情况下,在批处理作业的范围内,读取器和写入器需要被打开、关闭,并且需要一种用于持久化状态的机制。ItemStream 接口正是为此目的而设计的,如下例所示:

public interface ItemStream {

void open(ExecutionContext executionContext) throws ItemStreamException;

void update(ExecutionContext executionContext) throws ItemStreamException;

void close() throws ItemStreamException;
}
java

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

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