背景/上下文
我看到了几乎无数关于如何使用 Spring Batch 处理多个文件的示例,但是它们中的每一个都有一个所有文件都被处理成的对象。因此,许多包含兼容数据的文件都被处理到单个目标目标中,例如数据库表。
我想构建一个导入过程,它将接收十个不同的文件并将它们映射到同一个数据库/模式中的十个不同的目标表。文件名每天也会以可预测/可编码的方式略有变化,但我想我能处理好。我认为 Spring 可以做到这一点(多对多数据映射),但这是我不知道如何做的最后一件事。Spring 的声明式结构在某些方面非常有用,但老实说,我不确定如何设置多个映射,而且由于应用程序确实没有程序部分可言,所以我不能真正使用任何形式的迭代. 我可以简单地为每个文件制作单独的 jar,并在控制台上编写迭代脚本,但这也会使日志记录和报告变得复杂......坦率地说,这听起来很老套
问题
我如何告诉 Spring Batch 以十种不同的方式处理十个不同文件中的每一个,并将它们的数据映射到同一个数据库中的十个不同表中?
例子:
- 文件
Data_20190501_ABC_000.txt
包含 4 列波浪号分隔的数据,需要映射到ABC_data
6 列的表(两列是元数据) - 文件
Data_20190501_DEF_000.txt
包含 12 列波浪号分隔的数据,需要映射到DEF_data
14 列的表(两列是元数据) - 文件
Data_20190501_GHI_000.txt
包含 10 列波浪号分隔的数据,需要映射到GHI_data
12 列的表(两列是元数据) - 等等...十个不同的文件和表格
我可以处理波浪号分隔,我认为我可以以编程方式处理文件名中的日期,并且可以在 db 触发器中处理其中一个字段。另一个元数据字段应该是文件名,但这肯定是一个不同的问题。
更新
根据我认为 Mahmoud Ben Hassine 的建议,我为每个文件/表对创建了一个单独的读取器、映射器和写入器,并尝试使用 start(step1)、next(step2)、build() 范式以格式添加它们下面基于Spring 文档中的配置和运行作业中的示例:
@Autowired
private JobBuilderFactory jobs;
@Bean
public Job job(@Qualifier("step1") Step step1, @Qualifier("step2") Step step2) {
return jobs.get("myJob").start(step1).next(step2).build();
}
任何一个步骤都独立运行,但是一旦我将一个步骤添加为“下一步”,它只会执行第一个步骤,并在日志输出中生成“步骤已经完成或不可重新启动,因此无需执行任何操作”信息消息 - 其中我要离开这里吗?