Spring Batch @EnableBatchIntegration 注解
Posted huyuchengus
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Batch @EnableBatchIntegration 注解相关的知识,希望对你有一定的参考价值。
设置一个远程分块任务需要定义一系列的 beans:
- 一个连接工程来从消息中间件中获得连接,消息中间件包括有(JMS,AMQP 和其他)
- 一个
MessagingTemplate
来从主向从发送消息,然后再次发送回来 - 为 Spring 整合从消息中间件中获得消息来创建一个输入和输出通道
- 一个特殊的内容写(item writer)(ChunkMessageChannelItemWriter)在主机侧,这样真多处理和写入能够知道如何发送分块数据到工作机
- 在工作机侧的消息监听器(ChunkProcessorChunkHandler)来从主机上接受数据
这个在第一次看来的时候好像非常复杂,并且是一个艰巨的任务。在新发布的版本中我们介绍使用注解 @EnableBatchIntegration
来作为一个新的 API(RemoteChunkingMasterStepBuilder
和 RemoteChunkingWorkerBuilder
) 来简化配置。下面的示例显示了如何使用新的注解和 API:
@Configuration
@EnableBatchProcessing
@EnableBatchIntegration
public class RemoteChunkingAppConfig {
@Autowired
private RemoteChunkingMasterStepBuilderFactory masterStepBuilderFactory;
@Autowired
private RemoteChunkingWorkerBuilder workerBuilder;
@Bean
public TaskletStep masterStep() {
return this.masterStepBuilderFactory
.get("masterStep")
.chunk(100)
.reader(itemReader())
.outputChannel(outgoingRequestsToWorkers())
.inputChannel(incomingRepliesFromWorkers())
.build();
}
@Bean
public IntegrationFlow worker() {
return this.workerBuilder
.itemProcessor(itemProcessor())
.itemWriter(itemWriter())
.inputChannel(incomingRequestsFromMaster())
.outputChannel(outgoingRepliesToMaster())
.build();
}
// Middleware beans setup omitted
}
这个新的注解和构造器配置了 beans 中最难配置的部分。现在你可以非常容易的配置主机和 Spring 整合到工作机。你可以找到远程分块示例。用户在这个示例中使用了 samples module API,有关更多细节的内容请参考 Spring Batch Integration 章节。
与远程快配置简单化一样,这个新的版本将会介绍新的 API 来简化远程分区设置:RemotePartitioningMasterStepBuilder
和 RemotePartitioningWorkerStepBuilder。
这些可以自动重写你的配置类,如果 @EnableBatchIntegration
出现了的话,具体的示例代码请参考下面的示例:
@Configuration
@EnableBatchProcessing
@EnableBatchIntegration
public class RemotePartitioningAppConfig {
@Autowired
private RemotePartitioningMasterStepBuilderFactory masterStepBuilderFactory;
@Autowired
private RemotePartitioningWorkerStepBuilderFactory workerStepBuilderFactory;
@Bean
public Step masterStep() {
return this.masterStepBuilderFactory
.get("masterStep")
.partitioner("workerStep", partitioner())
.gridSize(10)
.outputChannel(outgoingRequestsToWorkers())
.inputChannel(incomingRepliesFromWorkers())
.build();
}
@Bean
public Step workerStep() {
return this.workerStepBuilderFactory
.get("workerStep")
.inputChannel(incomingRequestsFromMaster())
.outputChannel(outgoingRepliesToMaster())
.chunk(100)
.reader(itemReader())
.processor(itemProcessor())
.writer(itemWriter())
.build();
}
// Middleware beans setup omitted
}
有关这个新注解的更多细节,请参考 Spring Batch Integration 章节中的内容。
https://www.cwiki.us/display/SpringBatchZH/@EnableBatchIntegration+Annotation
以上是关于Spring Batch @EnableBatchIntegration 注解的主要内容,如果未能解决你的问题,请参考以下文章
Spring-batch:如何在 Spring Batch 中使用 skip 方法捕获异常消息?
spring batch ftp 集成超时错误 - 使用 spring-boot/spring-batch 进行 ETL
陪你解读Spring Batch带你入手Spring Batch
Spring boot spring.batch.job.enabled=false 无法识别