Spring Batch - 基于非行的数据结构文件阅读器

时间:2018-01-21 18:20:28

标签: spring spring-batch

我有一个不是基于行的数据的文件。它是一个包含多个表的文本文件。为了创建一个Item,我需要从几行中获取数据。实际上在我的情况下,一个文件对我来说是一个记录,我必须从几行中提取数据以填充项目对象。 例如:

class DataItem {
   private String price;
   private String quantity;

   //Getters and setters
}

输入文件如:

Price Data
========================
Price :   150$
Quantity: 4000
-------------------------

如上所述,我需要从文件中解析几行,以便创建一个数据库记录(一个Item Read)。

如何使用Spring批次实现此目的?

1 个答案:

答案 0 :(得分:1)

FlatFileItemReader有几个扩展点,对您有用。 RecordSeparatorPolicyLineMapper

RecordSeparatorPolicy

<强> RecordSeparatorPolicy
一旦读完整条记录,RecordSeparatorPolicy#isEndOfRecord(String record)就会向读者表明。它的true获取已读取的当前String,如果它表示完整记录,则返回false,如果不是,则返回true。在您的情况下,您将要开发一个在完全读入其中一个表后返回LineMapper的文件。

<强> LineMapper
DefaultLineMapper是一个策略接口,它允许将表示记录的String映射到项目。 LineTokenizer可以通过FieldSet(由ResultSet表示一个标记将一个标记符号化为一组简单的情况......一个类似于{的对象{1}}仅适用于文件),并将其传递给FieldSetMapper FieldSet,并将令牌映射到要返回的项目。您可以实现自己的LineMapper,也可以只实施LineTokenizer并使用其他现成的组件。

对于这两个扩展点,我希望你能够用一个非常直接的庄园用Spring Batch映射那些数据。