Spring batch 如何在spring批处理读取器中逐块读取多个数据库
我正在开发一个spring批处理作业,需要从4个不同的数据库(不同的服务器)读取数据 过程是这样的 1) 从db1读取记录 2) 使用db2中的信息过滤少量 3) 用db3中的信息过滤更多的内容 4) 用db4中的信息过滤更多的内容 5) 将过滤后的记录保存到db5 我的方法 对于从db1读取,我可以使用ItemReader(并在步骤中提供块值),然后使用多链处理器进行过滤,然后使用JpaItemWriter 我的方法有问题吗 我认为上述方法的问题是,假设我从db1中获得100000条记录,我需要查询db2、db3、db4 100000次,因为每个项都将调用ItemProcessor 可能的解决办法 1) 我认为,若为每个记录块而不是一条记录调用处理器,那个么问题就会得到解决 2) 或者,如果我可以链接spring读卡器,这样一个读卡器将数据(逐块)传递给另一个读卡器,在那里我可以根据其他数据库中的信息进行过滤,最后传递给处理器 但我不确定是否能够找到一种方法来实现我想到的上述解决方案 这些解决方案足够好吗?如果是,我如何实施这些方案 或者有没有其他方法来实现这一点 编辑:这是一个可能的重复,但该问题的解决方案不会解决我的问题Spring batch 如何在spring批处理读取器中逐块读取多个数据库,spring-batch,Spring Batch,我正在开发一个spring批处理作业,需要从4个不同的数据库(不同的服务器)读取数据 过程是这样的 1) 从db1读取记录 2) 使用db2中的信息过滤少量 3) 用db3中的信息过滤更多的内容 4) 用db4中的信息过滤更多的内容 5) 将过滤后的记录保存到db5 我的方法 对于从db1读取,我可以使用ItemReader(并在步骤中提供块值),然后使用多链处理器进行过滤,然后使用JpaItemWriter 我的方法有问题吗 我认为上述方法的问题是,假设我从db1中获得100000条记录,我需
因为我有两个以上的数据库要读取,而且如果我用writer的write方法编写过滤逻辑,这看起来像是一种黑客行为,因为writer不适合进行任何数据充实/过滤。您描述的模式的可能副本称为where one(或多个)item processor用于使用附加数据(例如,来自另一个数据源)丰富/过滤项目。这种模式确实会带来一些性能问题,因为它需要对每个项进行额外的查询
我认为,如果为每个记录块而不是1条记录调用处理器,问题就会得到解决。
:这个答案可能会有所帮助:。@MahmoudBenHassine我看到了这个问题和答案。但我完全没有理解你。您是否建议我们可以在writer中编写过滤逻辑?不,我说应该在项目处理器中完成(,其中一个(或多个)项目处理器用于丰富/过滤项目
)。但是,如果您想访问整个项目块,您需要在ItemWriteListener#beforeWrite
中进行,因此它不在编写器中,而是在编写器之前的侦听器中。@adanilev在这种情况下,块处理模型可能不是您的最佳选择。当然,您可以找到一种使用它的方法,但它可能不是最好的方法。您描述的模式的可能副本称为项目处理器,其中一个(或多个)项目处理器用于使用附加数据(例如,来自另一个数据源)丰富/过滤项目。这种模式确实会带来一些性能问题,因为它需要对每个项进行额外的查询我认为,如果为每个记录块而不是1条记录调用处理器,问题就会得到解决。
:这个答案可能会有所帮助:。@MahmoudBenHassine我看到了这个问题和答案。但我完全没有理解你。您是否建议我们可以在writer中编写过滤逻辑?不,我说应该在项目处理器中完成(,其中一个(或多个)项目处理器用于丰富/过滤项目
)。但是,如果您想访问整个项目块,您需要在ItemWriteListener#beforeWrite
中进行,因此它不在编写器中,而是在编写器之前的侦听器中。@adanilev在这种情况下,块处理模型可能不是您的最佳选择。当然你可以找到一种使用它的方法,但它可能不是最好的方法。