我是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)
。
感谢任何可以提供帮助的人!
答案 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调用。
祝你好运。