当前位置: 首页 > 知识库问答 >
问题:

使用注释并行(拆分)配置Spring批处理步骤

何宏博
2023-03-14

当我查看Spring Batch留档以并行执行步骤时,我只看到它通过XML的配置,如下所示。

<split id="split1" next="step4">
<flow>
    <step id="step1" parent="s1" next="step2"/>
    <step id="step2" parent="s2"/>
</flow>
<flow>
    <step id="step3" parent="s3"/>
</flow>

我正在使用Spring批处理编写一个应用程序,我也使用了Spring Boot,我的所有配置都是使用注释完成的。是否有一个我可以使用Java配置来配置拆分步骤的方法?我查看了Spring Batch中Step interface的API文档,但它没有Split Step的默认实现。有没有办法使用现有的默认实现来实现它?

目前我已经实现了我的其他工作如下:

@Bean
public Step someStep() {
    return stepBuilderFactory.get("someStep")
            .<A, B> chunk(1-).reader(someReader)
            .processor(someProcessor).writer(someWriter).build();
}

@Bean
public Job historicalDataJob() {
    return jobBuilderFactory.get("someJOb")
            .incrementer(new RunIdIncrementer()).flow(someStep()).end()
            .build();
}

共有1个答案

顾俊哲
2023-03-14

SimpleJobBuilder提供了通过java配置配置拆分的工具。下面是取自FlowJobBuilderTest(https://github.com/spring-projects/spring-batch/blob/master/spring-batch-core/src/test/java/org/springframework/batch/core/job/builder/FlowJobBuilderTests.java)的示例。显然,您会想稍微拆分一下,但它应该说明总体思路。

// Create each flow
Flow flow = new FlowBuilder<Flow>("subflow").from(step1).end();

// Create the job
SimpleJobBuilder builder = new JobBuilder("flow").repository(jobRepository).start(step2);

// Create split providing an async task executor so the flows are executed in parallel
builder.split(new SimpleAsyncTaskExecutor()).add(flow).end();

// Build the job and execute it
builder.preventRestart().build().execute(execution);
 类似资料:
  • 主要内容:使用Rem语句注释,注释使用::声明为创建的脚本添加注释或文档总是一个好习惯。 这是一个维护脚本用来理解脚本实际所做的事情所必需的注释。 例如,考虑下面这段没有注释形式的代码。 如果一个没有任何注释的脚本,普通人试图理解脚本,那么需要很多时间来理解脚本做些什么工作。 使用Rem语句注释 有两种方法可以在批处理脚本中创建注释; 一个是通过命令。 语句后的任何文本都将被视为注释,不会被执行。 以下是此声明的一般语法。 语法 其中是需要添

  • 当我使用Spring批处理管理运行长时间运行的批处理作业的多个实例时,它会在达到jobLauncher线程池任务执行程序池大小后阻止其他作业运行。但是从cron中提取多个工作似乎效果不错。下面是作业启动器配置。 Spring批处理管理员Restful API是否使用不同于xml配置中指定的作业启动器?

  • 我试图配置我的第一个多线程作业。我们有大约200,000条记录的主目录,我们需要处理。我想将文件分解为10个文件并处理它们。拆分文件tasklet工作正常 主步骤在我的配置中运行,但从步骤不运行。下面是我的配置。 分割者: MultiResourceItemReader: FlatFileItemWriter: 作业配置: 从属步骤配置: 请告知我做错了什么。我没有看到处理器urlFileItem

  • 我正在尝试为分区配置Spring批处理步骤。这里很好的示例显示了一个关于“ID范围”的分区,但我不知道如何从“数据页”范围开始。 在我的顺序步骤中,我有: null

  • 我们有一个服务调用,它返回一个id列表,我们用它调用另一个服务,该服务一次只接受一个id,因此我们使用的是驼峰分割器,并行处理转换为。现在,我们通过seda调用该服务,因此可以设置超时。这将导致并行处理不再是并行的问题,因为seda默认只有1个并发使用者在处理它。 选项: < li >放一个?seda上的concurrent consumers = x < li >使用direct而不是seda。

  • 我在一个步骤后回顾了Spring批处理流/拆分,发现(a)标记的解决方案没有解析,因为拆分无法实现,(b)我的用例不同,因此答案的意图不同。 我还回顾了如何使用spring批处理并行步骤拆分流配置上述用例?,但解决方案是增加并行化,而不是拆分和连接线程。 这似乎是一个足够常见的用例,应该是一个常见问题,但我还没有看到解决方案。 我有一个并行的spring批处理作业,我想在其中添加设置和拆卸步骤。安