如何在春季批次中合并分区

时间:2020-09-26 08:58:16

标签: java spring spring-batch

要求:

  1. 必须处理多个文件并将其映射到实体
  2. 收集一批N个实体
  3. 将其刷新到数据库//瓶颈

当前实施:

MultiResourcePartitioner读取多个文件,而TaskExecutor使其成为多线程。

    Step s1 = sbf.get("file-db")
            .<Person, Person>chunk(1500)
            .reader(reader())
            .writer(jdbcWriter())
            .build();

    Step master = sbf.get("master-step")
            .listener(stepExecutionListener())
            .partitioner("master", partitioner())
            .step(s1)
            .taskExecutor(taskExecutor())
            .build();

问题:

在每个线程中仅将来自单个文件的条目持久化到数据库是无效的。在使用内置的spring-batch功能提交数据库之前,是否有可能将实体合并到某些数据接收器中? 还是实现这一目标的唯一方法是将实体推送到一个简单的Queue,然后从中读取?

1 个答案:

答案 0 :(得分:0)

我发现的“解决方法”是实现自定义Partitioner,类似于MultiResourcePartitioner,并将文件名列表推送到ExectionContext