名词说明:
上下文:
执行:
执行上下文:
案例:
警告:一旦steps共享数据,这些数据就会把这些steps连接起来。努力使steps独立。如果你实在是不能独立他们,才使用下面的技术。你应该把数据共享作为steps不能独立的后备方案。
1 数据共享方式:
- a step存储共享数据到数据库,receiving step从数据库读取他们
- Execution context(执行上下文): 使用Spring Batch execution context 作为data容器。a step往上下文写数据,一个step从上下文读数据
- Holder:使用Spring bean和依赖注入。Spring往communicating beans中注入一个holder bean。第一个step往holder中set values,另一个step从holder中reads values
2 使用execution context来共享数据
什么是execution context:ExecutionContext类就代表了执行上下文,它就是一个适合与批应用的 键值对的一个 map。下面就是一个从上下文读写数据的例子:
executionContext.putString("importId", importId);String importId = jobExecutionContext.getString("importId");
an execution context只是a job execution的一部分,并且不同的执行上下文
Jobs 和 steps 有它们自己的execution context
Spring Batch提供了两种execution context: job execution context和step execution context。它们都是ExecutionContext类型但是它们的作用域不同。下图说明了在一个job execution过程中的两种执行上下文。
那么怎么访问执行上下文呢?你需要引用对应的执行:JobExecution:如果你想访问job执行上下文,StepExecution:如果你想访问step执行上下文。几乎所有的Spring Batch artifacts能够很容易的访问JobExecution和StepExecution,不幸的是item reader,processor,writer功能不能访问它们。不过你可以实现一个监听接口(如:ItemStream)来洞察execution.下面列举了ItemReader通过实现ItemStream接口来访问执行上下文
清单1:
public class FilesInDirectoryItemReader implementsItemReader , ItemStream {@Overridepublic void open(ExecutionContext executionContext)throws ItemStreamException { }@Overridepublic void update(ExecutionContext executionContext)throws ItemStreamException { }@Overridepublic void close() throws ItemStreamException { }@Overridepublic File read() throws Exception, UnexpectedInputException,ParseException, NonTransientResourceException { (...) }}
用job execution context在steps之间共享数据
时间: 2024-12-21 11:17:41