我正在尝试读取固定长度的文本文件,并使用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写入数据库),将进行扩展。
提前感谢您的帮助。
答案 0 :(得分:1)
你可以阅读两次。首先,阅读行,添加到数据库。第二步,再次阅读,将关系更新到数据库,保存自定义ItemReader中企业和部门的值。
答案 1 :(得分:0)
我最终在spring-batch-samples项目here中提出了一个非常类似于我的分支中的玩具示例的解决方案。
希望这可以帮助有类似问题的人。