Spring批处理-非基于行的数据结构文件读取器

Spring批处理-非基于行的数据结构文件读取器,spring,spring-batch,Spring,Spring Batch,我有一个不是基于行的数据的文件。它是一个包含多个表的文本文件。为了创建一个项目,我需要从几行中获取数据。实际上,在我的例子中,一个文件对我来说就是一条记录,我必须从几行中提取数据来填充item对象。 例如: class DataItem { private String price; private String quantity; //Getters and setters } 输入文件如下所示: Price Data ======================== P

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

class DataItem {
   private String price;
   private String quantity;

   //Getters and setters
}
输入文件如下所示:

Price Data
========================
Price :   150$
Quantity: 4000
-------------------------
如上所述,我需要解析文件中的几行,以便生成一个数据库记录(读取一项)


如何使用Spring批处理实现这一点?

FlatFileItemReader有几个扩展点对您很有用。
RecordSeparatorPolicy
LineMapper

记录分离政策

读取完整记录后,
RecordSeparatorPolicy
向读卡器指示。它是
RecordSeparatorPolicy#isEndOfRecord(String record)
获取已读取的当前字符串,如果它表示完整记录,则返回
true
,否则返回
false
。在您的例子中,您需要开发一个在其中一个表被完全读入后返回
true

LineMapper

LineMapper
是一个策略界面,允许将表示记录的字符串映射到项目。简单的情况可以通过
DefaultLineMapper
解决,它获取单个字符串,通过
LineTokenizer
将其标记为一组标记(由
FieldSet
表示,…一个类似于
ResultSet
的对象,仅用于文件),并将其传递给
字段集映射器
,该映射器获取
字段集
,并将令牌映射到要返回的项目。您可以实现自己的
LineMapper
,也可以只实现
LineTokenizer
并使用其他现成组件


有了这两个扩展点,我希望您能够在一个非常简单的庄园中用Spring Batch映射数据。

非常感谢Michael。你建议的方向很好。我能应付得来。