我有一个不是基于行的数据的文件。它是一个包含多个表的文本文件。为了创建一个Item,我需要从几行中获取数据。实际上在我的情况下,一个文件对我来说是一个记录,我必须从几行中提取数据以填充项目对象。 例如:
class DataItem {
private String price;
private String quantity;
//Getters and setters
}
输入文件如:
Price Data
========================
Price : 150$
Quantity: 4000
-------------------------
如上所述,我需要从文件中解析几行,以便创建一个数据库记录(一个Item Read)。
如何使用Spring批次实现此目的?
答案 0 :(得分:1)
FlatFileItemReader
有几个扩展点,对您有用。 RecordSeparatorPolicy
和LineMapper
。
RecordSeparatorPolicy
<强> RecordSeparatorPolicy
强>
一旦读完整条记录,RecordSeparatorPolicy#isEndOfRecord(String record)
就会向读者表明。它的true
获取已读取的当前String,如果它表示完整记录,则返回false
,如果不是,则返回true
。在您的情况下,您将要开发一个在完全读入其中一个表后返回LineMapper
的文件。
<强> LineMapper
强>
DefaultLineMapper
是一个策略接口,它允许将表示记录的String映射到项目。 LineTokenizer
可以通过FieldSet
(由ResultSet
表示一个标记将一个标记符号化为一组简单的情况......一个类似于{的对象{1}}仅适用于文件),并将其传递给FieldSetMapper
FieldSet
,并将令牌映射到要返回的项目。您可以实现自己的LineMapper
,也可以只实施LineTokenizer
并使用其他现成的组件。
对于这两个扩展点,我希望你能够用一个非常直接的庄园用Spring Batch映射那些数据。