如何使用数据源、可能的并发步骤和最终的聚合来设计spring批处理作业?

如何使用数据源、可能的并发步骤和最终的聚合来设计spring批处理作业?,spring,spring-batch,spring-integration,Spring,Spring Batch,Spring Integration,我是spring批处理新手,对如何实现用例有一些疑问。到目前为止,我对spring批处理的经验主要集中在由带读写器和处理器的Tasklet组成的作业上。我觉得下面的用例超出了我的经验,所以我想: 我需要阅读mdb的内容 我需要根据列值的组合来区分条目(最多生成5个组合) 处理最终需要生成T类型的项目集合 对于某些聚合,最终需要合并所有内容 我的想法是避免多次读取mdb,因此我正在研究一种基于组合拆分数据的方法,然后可能并发地运行进程。考虑到这一点,我阅读了spring批处理和集成中的拆分器和

我是spring批处理新手,对如何实现用例有一些疑问。到目前为止,我对spring批处理的经验主要集中在由带读写器和处理器的Tasklet组成的作业上。我觉得下面的用例超出了我的经验,所以我想:

  • 我需要阅读mdb的内容
  • 我需要根据列值的组合来区分条目(最多生成5个组合)
  • 处理最终需要生成T类型的项目集合
  • 对于某些聚合,最终需要合并所有内容
我的想法是避免多次读取mdb,因此我正在研究一种基于组合拆分数据的方法,然后可能并发地运行进程。考虑到这一点,我阅读了spring批处理和集成中的拆分器和分区组件


我不知道的是如何把所有的概念结合起来。

你说的MDB是什么意思?你是谁?如果答案是肯定的-您多次阅读MDB是什么意思?由于MDB是消息驱动的,我们在任何时候都无法读取它们,因此根据我对您的问题的理解,我将按以下方式执行:

  • MDB接收消息并将接收到的条目存储在某个DB表中——这将是某种类型的转换表;这类表格通常在处理金融交易时使用
  • 批处理窗口出现-作业被触发
  • 现在,您可以按任何方式查询表。由于您希望同时拆分和处理数据,我建议使用with
    taskExecutionPartitionHandler
    在并发线程中本地执行步骤。您需要做的是从数据库中读取数据,区分列值的组合-这应该相对容易-只需构造适当的SQL查询即可

  • 处理后的块聚合到
    ItemWriter write中(Listmdb=Microsoft Access Database;很抱歉造成混淆。我将尝试根据您的答案进行构建。如果我替换第一步,并设置一个负责读取mdb和流数据的步骤。下一步将是分区,然后是聚合器步骤。但列组合分隔从何而来?是否存在在分区步骤中使用long,这意味着多次读取,还是属于第一步(在第一步中,我将创建一个保存分区步骤数据的映射)?或者第三种解决方案如何,其中作业由一个步骤组成,负责RD、process和WR。该作业将有多个并发运行,由ExecutorFramework控制。不确定从架构的角度来看什么是最佳方法。一切取决于“组合分离”和“结果聚合”。例如,如果您想根据某个列值来区分项目,您只需要正确地对数据进行分区,这是读卡器/分区器的责任。例如,您可以为每个线程处理一种类型的数据(一对一关系);通过这种方式,您可以在ExecutionContext中存储一些转换值,并在最后聚合它们。我不是说您必须在一个步骤中完成—添加所需的步骤—它应该是一个干净的解决方案,具有清晰分离的、可恢复的步骤。