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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章