2014-01-31 26 views
1

我新的Spring Batch的和我相当与它失去了...Spring Batch的平面文件阅读器

我有4个种类的输入文件来处理,这遵循相同的模式:

头 记录 页脚

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

当读取文件时,标题中的一个字段指定哪种记录当前组成处理的平面文件。 另外,我的头文件中有3个字段,我必须在将每个(文件)记录插入数据库之前添加到这些字段中。

而且我认为考虑它更困难(对我来说),我还需要计算进程文件的MD5校验和以将此数据添加到我的数据库的所有记录中。

因此,要说明我试着解释:

文件1(类型=合同)

1CONTRACTHDATA1HDATA2HDATA3 
2CONTRACTDATA1CONTRACTDATA2CONTRACTDATA3 
2CONTRACTDATA1CONTRACTDATA2CONTRACTDATA3 
2CONTRACTDATA1CONTRACTDATA2CONTRACTDATA3 
3FOOTERDATA 

文件2(类型=三级)

1THIRDHDATA1HDATA2HDATA3 
2THIRDDATA1THIRDDATA2 
2THIRDDATA1THIRDDATA2 
2THIRDDATA1THIRDDATA2 
3FOOTERDATA 

而且我想要什么插入是:

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)对于我的第二个文件的每个“2 *”行。

谢谢任何​​人谁可以帮忙!

回答

1

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

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

第2步,是您正常的弹簧批次chunk oriented processing step和简单的flat file readerfixed length tokenizer。由于您是Spring批处理新手,让我们保持简单,只需在ItemProcessor中执行if语句来检测“1”行。当你这样做时,保存标题信息的副本。当你检测到“2”行时,用你的标题信息组成一个obj,然后传递它。当您检测到“3”时,返回null以跳过该条目。

作家应该是非常简单的。实现ItemWriter接口并进行jdbc调用。

祝你好运。

+0

谢谢杰克逊。我想我必须将MD5放入作业上下文中,才能从下一个面向块的处理步骤中获取它,并将头信息放入chunkContext中,对吗? – Cheloute

+0

md5在jobexecution context中是。 header info ... stepExecutionContext会工作...或者ItemProcessor中的本地实例变量也可以工作。 –

+0

非常感谢杰克逊,它的作品:) – Cheloute