Spring Batch

這篇先對Spring Batch 做個基本的介紹
現在企業業務中需要在關鍵任務中需要進行對大量數據的操作,這些業務操作包括自動化的,複雜的處理的大量的信息,這些操作就被稱爲批處理。

Spring Batch是一個輕量級的、全面的批處理框架,旨在使開發健壯的批處理應用程序對企業系統的日常操作至關重要。

Spring Batch提供了大量可重用的組件,包括日誌、追蹤、事務、任務作業統計、任務重啓、跳過、重複、資源管理。對於大數據量和高性能的批處理任務,Spring Batch同樣提供了高級功能和特性來支持,比如分區功能、遠程功能。總之,通過Spring Batch 能夠支持簡單的、複雜的和大數據量的批處理作業。

Spring Batch 3.0 主要新特性

  1. JSR-352 Support
  2. Upgrade to Support Spring 4 and Java 8
  3. Promote Spring Batch Integration to Spring Batch
  4. JobScope Support
  5. SQLite Support

JavaConfig 配置是在 2.2版本就已經支持了的。

SpringBatch 架構

Spring Batch核心架構分爲三層:應用層、核心層、基礎架構層。

spring batch 架構

應用層包含所有的批處理作業,通過Spring框架管理程序員自定義的代碼。核心層包含Spring Batch啓動和控制所需要的核心類,如:JobLauncher、Job和step等。應用層和核心層建立在基礎構架層之上,基礎構架層提供通用的讀(ItemReader)、寫(ItemWriter)和服務處理(如:RetryTemplate:重試模板;RepeatTemplate:重複模板,可以被應用層和核心層使用)。Spring Batch的三層體系架構使得Spring Batch框架在不同的層級進行擴展,避免不同層級間的影響。

開箱即用的組件

讀:支持文本文件讀、XML文件讀、數據庫讀,JMS隊列讀。
寫:支持寫文本文件、XML文件、數據庫、JMS隊列。
該組件還提供作業倉庫、作業調度器等基礎設施,大大簡化了批處理應用開發的複雜度。
可查看ItemReader 和 ItemReader 這兩個接口的實現類等。

還有許多的特性等用到再詳細說明。

這裏寫圖片描述

  • Job : 作業本身, 多個或一個Step組合一個Job
  • Step: 作業步Job 執行的一個環節,每個step都有 Reader Proccessor Writer的操作
  • ItemReader: 讀取信息的操作,可以從數據庫或者文件中讀取數據交給processor處理
  • ItemProcessor:處理數據的操作,接受讀操作傳遞的數據進行處理再傳遞給寫操作
  • ItemWriter:寫操作,將處理過的信息寫入數據庫或者文件中等
  • JobLauncher:用來啓動一個job
  • JobRepository:存儲spring batch的元數據

上面這張圖很重要,基本上我們需要操作的都包含在了上面這張圖上面。

Job 看起來是 Steps 的簡單的容易,其中可以包含多個Step,在Job中有很多需要知道的配置,例如如何讓Job 啓動,如何在它運行的時候存儲它的元數據。

Spring 2.2 支持 Java Config 來配置Batch
新增了 @EnableBatchProcessing 註解 和 兩個工廠類 分別是JobBuilderFactory 和StepBuilderFactory
通過 @EnableBatchProcessing 註解(這是一個類註解),StepScope 的實例被創建,並且使下列的bean都可以被自動注入

  • JobRepository - bean name “jobRepository”
  • JobLauncher - bean name “jobLauncher”
  • JobRegistry - bean name “jobRegistry”
  • PlatformTransactionManager - bean name “transactionManager”
  • JobBuilderFactory - bean name “jobBuilders”
  • StepBuilderFactory - bean name “stepBuilders”

下面是一個簡單的示例

@Configuration   //聲明爲配置類
@EnableBatchProcessing 
//在配置類中激活spring batch 的特性 並且提供基本的配置來建立批處理任務
@Import(DataSourceConfiguration.class)
//導入數據源配置
public class AppConfig {

    //以下兩個引用因爲類上配置了@EnableBatchProcessing所以可以自動注入
    @Autowired
    private JobBuilderFactory jobs;

    @Autowired
    private StepBuilderFactory steps;

    //@Bean 是Java Config(一個Spring 的子項目)的註解 相當於xml配置的<bean  />標籤 
    @Bean
    public Job job(@Qualifier("step1") Step step1, @Qualifier("step2") Step step2) {
        //從job共享類中得到一個名字爲"my job"的任務,開啓任務步Step1
        return jobs.get("myJob").start(step1).next(step2).build();
    }

    //任務步1的配置 step配置會在後面提到
    @Bean
    protected Step step1(ItemReader<Person> reader, ItemProcessor<Person, Person> processor, ItemWriter<Person> writer) {
        return steps.get("step1")
            .<Person, Person> chunk(10)
            .reader(reader)
            .processor(processor)
            .writer(writer)
            .build();
    }


    //Tasklet 是Step中具體執行邏輯的操作,可以設置重複執行, 同步/異步等。 
    @Bean
    protected Step step2(Tasklet tasklet) {
        return steps.get("step2")
            .tasklet(tasklet)
            .build();
    }
}

示例來自於 Spring Batch doc
http://docs.spring.io/spring-batch/trunk/reference/html/index.html

發佈了41 篇原創文章 · 獲贊 40 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章