Spring Batch @EnableBatchIntegration 註解

設置一個遠程分塊任務須要定義一系列的 beans:html

  • 一個鏈接工程來從消息中間件中得到鏈接,消息中間件包括有(JMS,AMQP 和其餘)
  • 一個 MessagingTemplate  來從主向從發送消息,而後再次發送回來
  • 爲 Spring 整合從消息中間件中得到消息來建立一個輸入和輸出通道
  • 一個特殊的內容寫(item writer)(ChunkMessageChannelItemWriter)在主機側,這樣真多處理和寫入可以知道如何發送分塊數據到工做機
  • 在工做機側的消息監聽器(ChunkProcessorChunkHandler)來從主機上接受數據

這個在第一次看來的時候好像很是複雜,而且是一個艱鉅的任務。在新發布的版本中咱們介紹使用註解 @EnableBatchIntegration 來做爲一個新的 API(RemoteChunkingMasterStepBuilder 和 RemoteChunkingWorkerBuilder) 來簡化配置。下面的示例顯示瞭如何使用新的註解和 API:git

 

@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 章節。github

與遠程快配置簡單化同樣,這個新的版本將會介紹新的 API 來簡化遠程分區設置:RemotePartitioningMasterStepBuilder 和 RemotePartitioningWorkerStepBuilder。spring

這些能夠自動重寫你的配置類,若是 @EnableBatchIntegration 出現了的話,具體的示例代碼請參考下面的示例:ui

@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 章節中的內容。this

https://www.cwiki.us/display/SpringBatchZH/@EnableBatchIntegration+Annotationcode

相關文章
相關標籤/搜索