【发布时间】:2011-09-11 21:40:49
【问题描述】:
我需要有关用于以下问题的模式的建议。
在对应于文件的表中有很多行——让我们称之为消息(由 DB 中的 MSG_ID 标识)。意思是,文件已经被分割成许多块并存入数据库。
因此,可以使用 GROUP_ID 列来识别文件对应的部分,而 MSG_ID 对应于单个消息。主键是 GROUP_ID 和 MSG_ID 的组合。
现在,每条消息都包含 n 条逻辑记录(通常是支付指令(k x 128 字节数据))。只有在阅读了接下来的 128 个字符后,才能说当前阅读支付指令在哪里结束。支付指令的一部分也可以在连续消息中。这意味着一条完整的支付指令可以分布在 MSG_ID n 的结尾和 MSG_ID n+1 的开头。
我们正在使用 Spring Batch 进行处理。
我已经尝试查询表并将所有记录一一写入一个平面文件,然后从那里启动 spring 批处理。
我想知道是否有任何模式可以在不使用平面文件的情况下实现需求。
喜欢,
从 db 中读取 MSG_ID 1 和 GROUP_ID "ABC"
将支付指令分开,并将每条指令交给处理器。
-
当到达 MSG_ID 1 的末尾时,检查手头的最终记录是否形成支付指令,如果不是,则读取 MSG_ID 2 和 GROUP_ID "ABC" 并附加到上一个剩余记录。
李> 读取到 MSG_ID==N,其中 N 在开始读取过程之前已知。
我可以使用 Spring 中的 ItemReaders 或 Java 中的 Iterator 模式吗?
更清楚地说,有一些处理模式,“如果您的逻辑记录分布在多行中”。 “如果数据库中的一行包含'M'个逻辑记录,其中M可能不是整数,使用这种类型的Iterator或ItemReaders”是否有任何模式
谢谢。
【问题讨论】:
标签: java spring iterator streamreader sqldatareader