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

Spring批处理:在一个TaskletStep中检索到的数据,在另一个步骤的处理中,最好的使用方法是什么,spring,spring-batch,Spring,Spring Batch,我的工作是: 第一步是TaskletStep,它从数据库表中检索一些记录(大约150-200条)到列表中 第二步从其他一些表中检索数据,并需要上一步中检索的记录列表进行处理 我遇到了三种方法: 1) 将在第一步中检索到的列表放入StepExecutionContext,然后将其升级到JobExecutionContext以在步骤之间共享数据 2) 使用spring的缓存概念,即使用@cacheable 3) 以编程方式将列表放入ApplicationContext 实现这一点的最佳方法是什么(最

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

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

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

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

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

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

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


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

而且,在第二步中检索到的数据可能是巨大的,即数百万。第二步中的每个记录的处理都需要从第一步检索的数据。