这类问题的模式

时间:2011-09-11 13:30:41

标签: java spring iterator streamreader sqldatareader

我需要建议用于以下问题的模式。

有很多行 - 让我们称之为消息(由DB中的MSG_ID标识) - 在一个对应于文件的表中。意思是,文件已分成许多部分并放入数据库中。

因此,可以使用GROUP_ID列标识与文件对应的部分,并且MSG_ID对应于单独的消息。主键是GROUP_ID和MSG_ID的组合。

现在,每条消息都包含n个逻辑记录(通常是支付指令(k x 128字节数据))。当前阅读支付指令结束时,只有在阅读了接下来的128个字符后才可以说。支付指令的一部分也可以是连续的消息。这意味着完整的支付指令可以分布在MSG_ID n的末尾和MSG_ID n + 1的开头。

我们正在使用弹簧批处理。

我已经尝试查询表并将所有记录逐个写入平面文件并从那里开始弹出批处理。

我想知道在不使用平面文件的情况下是否可以使用任何模式来实现此要求。

像,

  1. 从db

  2. 中读取MSG_ID 1和GROUP_ID“ABC”
  3. 分开付款说明并将每条指令交给处理器。

  4. 当达到MSG_ID 1结束时,检查手中的最终记录是否形成付款指令,如果没有读取MSG_ID 2和GROUP_ID“ABC”,则追加到前一个左侧记录。

  5. 读取到MSG_ID == N,其中N在开始读取过程之前已知。

  6. 我可以使用Spring中的ItemReaders或java中的Iterator模式吗?

  7. 更清楚的是,有一些处理模式,“如果您的逻辑记录分布在多行中”。是否有任何模式“如果DB中的一行包含'M'个数字逻辑记录,其中M可能不是整数,请使用此类型的Iterator或ItemReaders”

    感谢。

1 个答案:

答案 0 :(得分:1)

我相信您应该为您的场景编写自定义Reader(处理逻辑)。这当然不是一个常见的案例。

您提出的算法似乎没问题。您应该毫不费力地编写一份Reader来阅读完整的付款说明并将其移交给进一步处理。