Spring Batch ItemReader处理Tree结构化文件

时间:2016-03-04 16:03:06

标签: java spring-batch

我正在尝试读取固定长度的文本文件,并使用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

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

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我最终在spring-batch-samples项目here中提出了一个非常类似于我的分支中的玩具示例的解决方案。

希望这可以帮助有类似问题的人。