【问题标题】:Spring Batch Flat File ReaderSpring Batch 平面文件阅读器
【发布时间】:2014-02-24 02:01:53
【问题描述】:

我是 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*”行。

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

【问题讨论】:

    标签: spring spring-batch


    【解决方案1】:

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

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

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

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

    祝你好运。

    【讨论】:

    • 谢谢杰克逊。我想我必须将我的 MD5 放入 Job Context 以从下一个面向块的处理步骤中获取它,并将标头信息放入 chunkContext,对吗?
    • md5 在作业执行上下文中是的。标头信息... stepExecutionContext 可以工作...或者 ItemProcessor 中的本地实例变量也可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 2019-06-04
    • 2021-06-06
    • 2016-02-11
    • 2013-11-26
    • 2012-09-19
    相关资源
    最近更新 更多