我正在尝试使用 Spring Batch 编写概念证明,其中涉及读取固定宽度的文件并将记录插入数据库。我没有零经验可以依靠,并且发现文档对我想要实现的目标有所了解。
我可以毫无问题地阅读标题行和正文行(使用FixedLengthTokenizer
and PatternMatchingCompositeLineMapper
)。但是,在构建域对象时,我需要做两件不太明显的事情:
- 存储标头 ID、文件名等的对象还需要文件中的记录总数(而不是写入 DB 的数量 - 这是为了方便手动检查(如果需要))
- 存储单个记录的对象需要引用文件的标头ID
换句话说,逐项读取、处理和写入是不够的。每行对应的数据依赖于文件中的其他行。
我确信必须有一个干净的基于 Spring 的方法,我只是不确定从哪里开始寻找。
例子:
HDR 12345
ROW 2013-08-01 Lorem ipsum
ROW 2013-08-01 dolor sit amet
我需要构建的三个域对象是:
Header {id: 12345, records: 2}
Record {header_id: 12345, text: Lorem ipsum }
Record {header_id: 12345, text: dolor sit amet }
在生产中,文件会更加复杂且非常大 - 例如,将它们以中间状态写出来并不理想,尽管我想知道解决方案是否可能涉及分两次处理它们,以某种方式构建所需的数据那样?
提前致谢,