Spring 批处理 ItemReader 以处理树结构文件

Spring Batch ItemReader to process Tree structured File

我正在尝试读取固定长度的文本文件并使用 spring 批处理将其寄存器导入数据库,但输入文件的总体布局是嵌套的,类似于(添加表格只是为了简化可视化) :

FILE HEADER
    ENTERPISE1 HEADER
        DEPARTMENT1 HEADER
            WORKER1
            WORKER2
        DEPARTMENT1 FOOTER
        DEPARTMENT2 HEADER
            WORKER3
        DEPARTMENT2 FOOTER
    ENTERPRISE1 FOOTER  
    ENTERPRISE2 HEADER
        DEPARTMENT3 HEADER
            WORKER4
        DEPARTMENT3 FOOTER
    ENTERPRISE2 FOOTER
             .
             .
             .
FILE FOOTER

必须将文件导入到包含表和关系的数据库中。

TABLE       RELATION   TABLE 

ENTERPRISE (ONETOMANY) DEPARTMENTS
DEPARTMENT (ONETOMANY) WORKERS

在我实施的其他 spring 批处理项目中,我们使用具有相同布局寄存器的文件,其中的字段引用它们所属的关系。在这种情况下,寄存器的类型由行第一列的 "id" 标识,关系由 "tree" 结构标识。 是否有任何 spring 开箱即用的 ItemReader 可以帮助完成这项任务?我得到的解决方案是构建一个自定义 ItemReader,它读取企业寄存器并继续读取行构建部门和工作人员对象并返回一个包含所有部门和工作人员的企业对象立即写入数据库但我不知道是否当工人和部门的数量太多时会扩展(使用 JPA 写入数据库)。

在此先感谢您的帮助。

你可以读两遍。首先,读取行,添加到数据库。第二步,再次读取,将关系更新到数据库中,将企业和部门的值保存在自定义ItemReader中。

我最终从 spring-batch-samples 项目 here.

中提出了一个与玩具示例非常相似的解决方案

希望这对遇到类似问题的人有所帮助。