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



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

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

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

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

3)以编程方式将列表放在应用程序上下文中

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

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

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

最新更新