在我研究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 Batch编写应用程序,其中我也使用过Spring Boot,并且我的所有配置都是使用注释完成的。是否可以使用Java配置来配置拆分步骤?我检查了Spring Batch中Step接口的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(); }
该SimpleJobBuilder配置通过Java配置分裂提供设施。以下是从FlowJobBuilderTests(https://github.com/spring- projects/spring-batch/blob/master/spring-batch- core/src/test/java/org/springframework/batch/core/job/ builder / FlowJobBuilderTests.java)。显然,您需要对此进行分解,但这应该可以说明总体思路。
SimpleJobBuilder
FlowJobBuilderTests
// 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);