Java Spring批处理:读取器问题:用于形成域对象的多个输入查询

Java Spring批处理:读取器问题:用于形成域对象的多个输入查询,java,spring-batch,Java,Spring Batch,我有一个从数据库获取产品ID的阅读器查询 我的域对象也包含几个列表 我的提交计数是1000 因此,我的sql一次获取1000个项目(即1000个产品ID) 然而,在我的rowmapper中,我有10个其他查询,我为块中获取的每个产品Id运行这些查询。这些查询将返回许多行作为结果集。我解析这些结果集以设置域对象中的列表 这是创建一个完整域对象的方式,然后我将其传递给编写器,以便使用合适的映射器将其写入XML 然而,由于rowmapper中的这些查询在每次获取记录时都会运行,所以我的整个程序性能受到

我有一个从数据库获取产品ID的阅读器查询

我的域对象也包含几个列表

我的提交计数是1000

因此,我的sql一次获取1000个项目(即1000个产品ID)

然而,在我的rowmapper中,我有10个其他查询,我为块中获取的每个产品Id运行这些查询。这些查询将返回许多行作为结果集。我解析这些结果集以设置域对象中的列表

这是创建一个完整域对象的方式,然后我将其传递给编写器,以便使用合适的映射器将其写入XML

然而,由于rowmapper中的这些查询在每次获取记录时都会运行,所以我的整个程序性能受到了严重的影响

我无法将这些查询与主读者查询结合起来

对于这样的需求,是否有任何解决方案来提高性能?我知道有什么方法可以对rowmapper中运行的查询进行并行处理以减少处理时间吗


谢谢你的阅读

对于您的具体问题:

  • 是否有任何解决方案可满足此类要求以提高性能-是。根据您的特定用例(数据库设计、任何查询是否可缓存等),可能有许多解决方案
  • 我有没有办法对rowmapper中运行的查询执行一些并行处理,以减少处理时间-通过这种方式,我必须询问是否有能力让读卡器仅返回已填充id的域对象,并让ItemProcessor执行其余查询。我这样问是因为有一个名为Spring Batch Integration()的项目提供了一个AsyncItemProcessor。您可以使用它并行处理每个项(执行查找),然后在查找完成后,相应的AsyncItemWriter将写出结果。这将是实现此类逻辑并行化的最快、最简单的方法

  • 并行化这种类型的场景还有其他选择,但是请记住,运行许多小查询会破坏数据库。并行运行它们只会加剧这个问题。您可能需要重新考虑这些子查询的结构。

    AsyncItemProcessor可能是我正在寻找的解决方案。。但是,您能给我指出一些可用的示例代码吗?看看这个示例: