ItemStream
双ItemReaders
和ItemWriters
很好地服务于他们的个人目的,但有一个
他们俩都关心需要另一个接口。一般来说,作为
作为批处理作业范围的一部分,读取器和写入器需要打开、关闭,并且
需要一种持久化状态的机制。这ItemStream
interface 就是为了达到这个目的,
如以下示例所示:
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
以确保安全释放 open 期间分配的所有资源。update
主要是为了确保当前持有的任何状态都加载到
提供的ExecutionContext
.此方法在提交之前调用,以确保
当前状态在提交之前保留在数据库中。
在特殊情况下,客户端的ItemStream
是一个Step
(来自春季
Batch Core)、一个ExecutionContext
为每个 StepExecution 创建,以允许用户
存储特定执行的状态,如果
一样JobInstance
将再次启动。对于熟悉 Quartz 的人来说,语义
与 Quartz 非常相似JobDataMap
.