gpt4 book ai didi

java - 如何使用 Spring Batch 以不同的方式处理多个不同的文件

转载 作者:行者123 更新时间:2023-12-02 09:56:48 27 4
gpt4 key购买 nike

背景/上下文

我看到了几乎无数关于如何使用 Spring Batch 处理多个文件的示例,但是每个文件都有一个对象,所有文件都被处理到该对象中。因此,许多包含兼容数据的文件都被处理到单个目标中,例如数据库表。

我想构建一个导入过程,它将接受十个不同的文件并将它们映射到同一数据库/架构中的十个不同的目标表。文件名每天也会以可预测/可编码的方式略有变化,但我想我能够处理这个问题。我认为 Spring 可以做到这一点(多对多数据映射),但这是我找不到如何做的最后一件事。 Spring 的声明式结构对于某些事情来说非常有用,但老实说,我不确定如何设置多个映射,并且由于应用程序实际上没有程序部分可言,因此我无法真正使用任何形式的迭代。我可以简单地为每个文件制作单独的 jar,并在控制台上编写迭代脚本,但这也使日志记录和报告变得复杂......坦率地说,这听起来很hacky

问题

如何告诉 Spring Batch 以十种不同的方式处理十个不同的文件,并将它们的数据映射到同一数据库中的十个不同的表中?

示例:

  • 文件 Data_20190501_ABC_000.txt 包含 4 列波浪号分隔的数据,需要映射到具有 6 列(两列是元数据)的表 ABC_data
  • 文件 Data_20190501_DEF_000.txt 包含 12 列波浪号分隔的数据,需要映射到具有 14 列(两列是元数据)的表 DEF_data
  • 文件 Data_20190501_GHI_000.txt 包含 10 列波浪号分隔的数据,需要映射到具有 12 列(两列是元数据)的表 GHI_data
  • 等等......十个不同的文件和表格

我可以处理波形符分隔,我想我可以以编程方式处理文件名中的日期,并且其中一个字段可以在数据库触发器中处理。另一个元数据字段应该是文件名,但这肯定是一个不同的问题。

更新

根据我认为 Mahmoud Ben Hassine 的建议,我为每个文件/表对创建了一个单独的读取器、映射器和编写器,并尝试使用 start(step1)、next(step2)、build() 范例添加它们基于 Configuring and Running a Job 中的示例,采用以下格式来自 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();
}

任一步骤独立运行,但是一旦我添加一个步骤作为“下一个”步骤,它只执行第一个步骤,并在日志中生成“步骤已完成或不可重新启动,因此无需执行任何操作”信息消息输出 - 我该去哪里?

最佳答案

Spring Batch 中面向 block 的步骤一次只能处理一种类型的项目。我会使用其中包含不同的面向 block 的步骤的作业。这些步骤可以并行运行,因为输入文件之间没有关系/顺序。

大多数配置在您的情况下都是常见的,因此您可以创建一个具有通用配置属性的抽象步骤定义,以及每个步骤具有特定属性的多个步骤(在您的情况下,我认为它应该是文件名称、字段集映射器和目标表)。

关于java - 如何使用 Spring Batch 以不同的方式处理多个不同的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55937444/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com