使用StepExecutionContext / JobExecutionContext共享具有大值的Hashmap的后果

时间:2018-11-11 17:53:15

标签: java spring spring-batch batch-processing

我有一个要求,我要使用SQL语句在Step of Reader中读取值,并在下一个Reader中执行相同的请求。

如果在First阅读器中已经获取了数据并将该集合(可能是HashMap)传递给下一步,我不想再次提出请求。 为此,我通过了以下SO链接: How can we share data between the different steps of a Job in Spring Batch?

在许多评论中都提到“数据必须简短”

此外,在一个回复中提到:这些上下文可以共享字符串或简单值,但不适用于共享集合或大量数据。

通过传递该HashMap,我相信它会自动推断将传递HashMap的引用。

最好事先知道通过它的可能后果以及任何更好的替代方法。

1 个答案:

答案 0 :(得分:0)

在步骤之间传递数据确实是通过执行上下文完成的。但是,您应该注意放置在执行上下文中的数据的大小,因为它们在步骤之间是持久存在的。

  

如果在First阅读器中已经获取了数据并将该集合(可能是HashMap)传递给下一步,我不想再次发出请求

您只能从数据库读取一次数据并将其放入高速缓存中。然后,第二个读取器可以从缓存中获取数据。这样比第二次从数据库读取数据更快。

希望这会有所帮助。