spring批处理中的一个步骤是否可以有多个读取器?

Is it possible to have multiple readers for one step in spring batch?

我需要创建一个 spring 批处理,其中我需要从 2 个不同的表中获取数据。 这将是 reader 部分。

问题是我需要 2 reader 个查询。并且只会根据条件调用其中一个。 但作家将是一样的。 这样tasklet就基本一样了。

我可以在一个步骤中有 2 readers 将根据条件调用..??

类似于 spring 批处理 xml 中的内容:

if (condition)
then reader1
else reader2


...
....
......


<reader1 id=".." class="..">

</reader1>

.....
........

<reader2 id=".." class="..">

</reader2>

您是否考虑过使用条件控制流模式 Spring 批量报价?我认为它可以导致更简单的构造并坚持一些核心模式 spring batch 鼓励。

您基本上是对要调用步骤的“条件”进行编程。所以定义两个步骤,比如 step1 有一个 reader,处理器,一个对象类型的编写器和 step2 有一个 reader,处理器,另一种类型的编写器。也许作家也在类型之间共享。然后你可以像这样定义控制流:

    @Bean
    public Job myJob() {
        JobBuilder jobBuilder = jobs.get("Spring Batch: conditional steps");
     
        return jobBuilder.start(determineRoute())
                             .on("item1").to(flow1())
                             .on("item2").to(flow2()).end()
                         .build();
                 
    }

在示例中 determineRoute() 是一个 tasklet,returns 自定义 ExitStatus 值 item1item2 & flow1flow2 不同处理每个对象的流程(或步骤)。

在他们的文档中查看:https://docs.spring.io/spring-batch/docs/current/reference/html/step.html#conditionalFlow

编辑:您也可以使用 JobExecutionDecider https://www.baeldung.com/spring-batch-conditional-flow#2-programmatic-branching-withjobexecutiondecider

做类似的事情