Spring批量平面文件阅读器

时间:2014-01-31 11:28:32

标签: spring spring-batch

我是Spring Batch的新手,我很遗憾......

我有4种要处理的输入文件,它们遵循相同的模式:

头 记录 页脚

当然,“记录”是我的4种不同文件之间的变化。

读取文件时,标题中的字段指定当前正在组成处理的平面文件的记录类型。 此外,我的标题中有3个字段,我必须在将它插入数据库之前添加到每个(文件)记录中。

我想我认为它更难(对我来说......),我还必须计算过程文件的MD5校验和,以便将这些数据添加到我的数据库的所有记录中。

因此,为了说明我试图解释的内容:

文件1(类型=合同)

1CONTRACTHDATA1HDATA2HDATA3
2CONTRACTDATA1CONTRACTDATA2CONTRACTDATA3
2CONTRACTDATA1CONTRACTDATA2CONTRACTDATA3
2CONTRACTDATA1CONTRACTDATA2CONTRACTDATA3
3FOOTERDATA

文件2(type = THIRD)

1THIRDHDATA1HDATA2HDATA3
2THIRDDATA1THIRDDATA2
2THIRDDATA1THIRDDATA2
2THIRDDATA1THIRDDATA2
3FOOTERDATA

我要插入的内容是:

对于我的第一个文件的每个“2 *”行

INSERT INTO CONTRACT (field1, field2, field3, field4, field5, field6, field7) VALUES (HDATA1, HDATA2, HDATA3, CONTRACTDATA1, CONTRACTDATA2, CONTRACTDATA3, MD5)

对于我的第二个文件的每个“2 *”行,

INSERT INTO THIRD (field1, field2, field3, field4, field5, field6) VALUES (HDATA1, HDATA2, HDATA3, THIRDDATA1, THIRDDATA2, MD5)

感谢任何可以提供帮助的人!

1 个答案:

答案 0 :(得分:1)

对于您的工作,您需要两个步骤。

步骤1,需要计算文件的MD5校验和。为此,您应该使用tasklet step

第2步是正常的春季批次chunk oriented processing step和简单的flat file reader fixed length tokenizer。由于您不熟悉spring批处理,所以让它保持简单,只需在ItemProcessor中执行if语句即可检测“1”行。执行此操作时,请保存标题信息的副本。当您检测到“2”行时,使用您的标题信息组成一个obj,并将其传递给它。当您检测到“3”时,返回null以跳过该条目。

作者应该非常直截了当。实现ItemWriter接口并进行jdbc调用。

祝你好运。