2 回答
TA贡献1797条经验 获得超4个赞
关于“什么时候提交?”的问题,根据Spring Batch 文档:
5.1 面向块的处理
Spring Batch 在其最常见的实现中使用“面向块的”处理风格。面向块的处理是指在事务边界内一次读取一个数据,并创建将被写出的“块”。从 ItemReader 读入一项,交给 ItemProcessor 并聚合。一旦读取的项数等于提交间隔,则通过 ItemWriter 写出整个块,然后提交事务。
下面是上述相同概念的代码表示:
List items = new Arraylist();
for(int i = 0; i < commitInterval; i++){
Object item = itemReader.read()
Object processedItem = itemProcessor.process(item);
items.add(processedItem);
}
itemWriter.write(items);
因此,如果你打算使用 Spring Batch,你不应该搞乱设置自动提交,因为这是你应该信任框架为你处理的事情。下面的部分显示了如何配置的示例:
5.1.1 配置步骤
尽管 Step 所需的依赖项列表相对较短,但它是一个极其复杂的类,可能包含许多协作者。为了简化配置,可以使用 Spring Batch 命名空间:
<job id="sampleJob" job-repository="jobRepository">
<step id="step1">
<tasklet transaction-manager="transactionManager">
<chunk reader="itemReader" writer="itemWriter" commit-interval="10"/>
</tasklet>
</step>
</job>
上面的配置表示创建面向项目的步骤所需的唯一依赖项:
reader - 提供待处理项目的 ItemReader。
writer - 处理 ItemReader 提供的项目的 ItemWriter。
事务管理器 - Spring 的 PlatformTransactionManager 将用于在处理期间开始和提交事务。
job-repository - JobRepository 将用于在处理期间(就在提交之前)定期存储 StepExecution 和 ExecutionContext。对于内联(在 a 中定义的),它是元素上的一个属性;对于独立步骤,它被定义为 .
commit-interval - 在提交事务之前将处理的项目数。
添加回答
举报