2

我是弹簧批处理的新手,我对如何实现用例有一些疑问。到目前为止,我在 spring 批处理方面的经验主要集中在由具有读取器、写入器和处理器的小任务组成的作业上。我觉得以下用例超出了我的经验,所以这里是:

  • 我需要从 mdb 中读取
  • 我需要根据列值的组合来区分条目(将产生最多 5 个组合)
  • 处理最终需要生成类型为 T 的项的集合。
  • 对于某些聚合,最后都需要合并所有内容。

我的想法是避免多次读取 mdb,所以我正在寻找一种基于组合拆分数据的方法,然后可能同时运行这些进程。考虑到这一点,我阅读了 Spring 批处理和集成中的 Splitter 和分区组件。

我不完全知道如何将所有概念放在一起。

4

1 回答 1

0

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

  1. MDB 接收消息并将接收到的条目存储在某个 DB 表中——这将是某种转换表;此类表通常在处理金融交易时使用
  2. 批处理窗口出现 - 作业被触发。
  3. 现在您可以以任何您想要的方式查询该表。由于您正在寻找同时拆分和处理数据,我建议使用Spring Batch 分区TaskExecutorPartitionHandler在并发线程中本地执行步骤。您需要做的是从数据库中读取数据,区分列值的组合 - 这应该相对容易 - 只需构建适当的 SQL 查询即可。
  4. 已处理的块ItemWriter write(List<? extends T> items)根据提交间隔聚合成;如果这样的聚合对您来说还不够,我会添加另一个表和批处理步骤来聚合以前处理的条目。

基本上这就是批处理的工作原理——您读取项目、转换它们并写入。下一步——如果它不只是一个简单的 tasklet——完全一样。

于 2013-06-11T21:10:59.887 回答