Spring Batch:在另一个步骤的处理中,使用一个TaskletStep中检索的数据的最佳方法是什么

时间:2013-11-09 07:59:51

标签: spring spring-batch

我有一份工作: 第一步是TaskletStep,它从数据库表中检索一些记录(大约150-200)到列表中。

第二步从其他表中检索数据,并要求在上一步中检索的记录列表进行处理。

我遇到了三种方法: 1)将在StepExecutionContext的第一步中检索的列表放入,然后将其提升为JobExecutionContext以在步骤之间共享数据。

2)使用spring的缓存概念,即使用@cacheable

3)以编程方式将列表放在ApplicationContext

实现这一目标的最佳方法是什么(如果可以通过示例解释它会更好),请记住两个主要问题: 如果在第一步中检索的数据量增加并且性能

1 个答案:

答案 0 :(得分:2)

请记住,步骤上下文中的对象存储在数据库中,因此您必须确保对象是可序列化的,并且实际上是一些对象。 如果您确定,请将对象放在jobExecutionContext中(作为解决方案1)或使用bean持有者(Passing data to future step);只有当第一步中的数据为SMALL时,这种方法才有效 另外,您可以在步骤2中处理数据而无需数据后续处理,但在步骤2中处理数据时,可以轻松管理step1数据的缓存;这样你不需要step1,不需要将step1数据存储到数据库,但是在step2处理数百万条记录时step1数据查找不会影响时间处理。

我希望我很清楚,英语不是我的语言