单个输入文件中多个输出db表的记录

时间:2012-01-10 06:41:04

标签: spring spring-batch

我正在获取一个包含不同列数的多个输出表的数据的文件。

第一列将决定记录应该去的表。

head1|abc|123|sklj|sad
head2|klj|lkj|323|323
tab1|one|two|three|four|five
tab2|one|two|three
tab2|one|two|three
tab3|one|two|three|four

如上所示,head指定标题。所以前两行是标题记录。

tab1指定表1,其中包含五列。因此,所有以tab1开头的记录都应加载到table1中。

tab2指定表2,它有三列。因此,所有以tab2开头的记录都应加载到table2中。

tab3指定表3,它有四列。因此,所有以tab3开头的记录都应该加载到table3中。

如何实现这种情况?

是否有相同方案的可用示例?

感谢阅读!

1 个答案:

答案 0 :(得分:0)

一个简单的弹簧批解决方案可能是:

  • 具有抽象父类“targetTab”的域模型和每个目标表的特定类,例如TargetTab1扩展了TargetTab
  • 读取行列表/地图的读者
  • (映射选项1)自定义FieldSetMapper实现,它决定列表/映射中第一个条目上的目标表,并创建一个特定的targetTab对象,例如: targetTab1
  • (映射选项2)处理器与上面的FieldSetMapper
  • 相同
  • writer接受TargetTab类型的所有对象
  • 同一个作者检查类型并决定应该使用哪个真正的作者(简单dao实现)

更具扩展性的解决方案可能会引入预批/脚本,根据目标表将文件拆分为3个(或更多)文件,并为每种类型分配不同的批处理