1

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

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

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

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

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

实现这一点的最佳方法是什么(如果可以用一个例子来解释会更好),请记住两个主要问题:第一步中检索的数据量是否增加和性能

4

1 回答 1

2

请记住,步骤上下文中的对象存储到数据库中,因此您必须确保对象是可序列化的并且实际上是少数。如果您确定,请将对象放入您的 jobExecutionContext (作为解决方案 1.)或使用 bean holder(将数据传递到未来步骤);仅当第一步中的数据很小时,这种方法才有效。
否则,您可以在 step2 中处理数据,而无需在 step1 中检索数据,但在 step2 中处理数据时可以轻松管理 step1 数据的缓存;这样您就不需要step1,也不需要将step1数据存储到数据库中,但是在step2中处理数百万条记录时进行step1数据查找不会影响时间处理。

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

于 2013-11-11T07:35:27.793 回答