ItemStream
双ItemReaders和ItemWriters很好地服务于他们的个人目的,但有一个
他们两人的共同问题是需要另一个接口。一般来说,作为
在批处理作业作用域的一部分中,需要打开、关闭读取器和写入器
需要一种持久状态的机制。这ItemStream接口就是为了这个目的,
如以下示例所示:
public interface ItemStream {
void open(ExecutionContext executionContext) throws ItemStreamException;
void update(ExecutionContext executionContext) throws ItemStreamException;
void close() throws ItemStreamException;
}
在描述每种方法之前,我们应该提到ExecutionContext.客户ItemReader也实现ItemStream应该调用open在调用任何read,以打开任何资源(例如文件)或获取连接。类似的
限制适用于ItemWriter实现ItemStream.如中所述
第 2 章,如果在ExecutionContext,它可以用来启动
这ItemReader或ItemWriter在初始状态以外的位置。相反close用于确保在打开期间分配的任何资源都被安全释放。update主要是为了确保当前持有的任何状态都被加载到
提供的ExecutionContext.在提交之前调用此方法,以确保
当前状态在提交之前保留在数据库中。
在特殊情况下,客户端的ItemStream是一个Step(来自Spring
Batch Core),一个ExecutionContext为每个 StepExecution 创建,以允许用户
存储特定执行的状态,并期望在
一样JobInstance重新启动。对于熟悉 Quartz 的人来说,语义
与Quartz非常相似JobDataMap.