1. 程式人生 > >Spring Boot Batch批處理框架深入解讀

Spring Boot Batch批處理框架深入解讀

Spring Boot Batch批處理框架深入解讀

1、batch簡介

batch 是一款輕量的、全面的批處理框架,用於開發強大的日常運營的企業級批處理應用程式。

框架主要有以下功能:

  • Transaction management(事務管理)
  • Chunk based processing(基於塊的處理)
  • Declarative I/O(宣告式的輸入輸出)
  • Start/Stop/Restart(啟動/停止/再啟動)
  • Retry/Skip(重試/跳過)

2、框架全貌

框架四個角色:

  • JobLauncher是任務啟動器,通過它來啟動任務,可以看做是程式的入口。
  • Job代表著一個具體的任務。
  • Step代表著一個具體的步驟,一個Job可以包含多個Step。
  • JobRepository是儲存資料的地方,可以看做是一個數據庫的介面,在任務執行的時候需要通過它來記錄任務狀態等等資訊。

JobLauncher

JobLauncher是任務啟動器,該介面只有一個run方法:

public interface JobLauncher {
    public JobExecution run(Job job, JobParameters jobParameters) throws JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException, JobParametersInvalidException;
}

通過JobLauncher可以在Java程式中呼叫批處理任務,也可以通過命令列或者其他框架(如定時排程框架Quartz、Web後臺框架Spring MVC)中呼叫批處理任務。Spring Batch框架提供了一個JobLauncher的實現類SimpleJobLauncher。

Job

Job代表著一個任務,一個Job與一個或者多個JobInstance相關聯,而一個JobInstance又與一個或者多個JobExecution相關聯:

很多時候,任務並不是執行一次就完了,更多的可能情況是定時執行任務。為區分每次執行的任務,框架使用JobInstance。

如上圖所示,Job是一個EndOfDay(每天最後時刻執行的任務),那麼其中一個JobInstance就代表著2007年5月5日那天執行的任務例項。框架通過在執行JobLauncher.run(Job, JobParameters)方法時傳入的JobParameters來區分是哪一天的任務。

由於2007年5月5日那天執行的任務可能不會一次就執行完成,比如中途被停止,或者出現異常導致中斷,需要多執行幾次才能完成,所以框架使用了JobExecution來表示每次執行的任務。

ItemReader

ItemReader代表著讀操作,其介面如下:

public interface ItemReader<T> {    
    T read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException;
}

框架已經提供了多種ItemReader介面的實現類,包括對文字檔案、XML檔案、資料庫、JMS訊息等讀的處理,當然我們也可以自己實現該介面。

ItemProcessor

ItemReader代表著處理操作,其介面如下:

public interface ItemProcessor<I, O> {    
    O process(I item) throws Exception;
}

process方法的形參傳入I型別的物件,通過處理後返回O型的物件。開發者可以實現自己的業務程式碼來對資料進行處理。

ItemWriter

ItemReader代表著寫操作,其介面如下:

public interface ItemWriter<T> {    
    void write(List<? extends T> items) throws Exception;
}

框架已經提供了多種ItemWriter介面的實現類,包括對文字檔案、XML檔案、資料庫、JMS訊息等寫的處理,當然我們也可以自己實現該介面。

JobRepository

JobRepository用於儲存任務執行的狀態資訊,比如什麼時間點執行了什麼任務、任務執行結果如何等等。框架提供了2種實現,一種是通過Map形式儲存在記憶體中,當Java程式重啟後任務資訊也就丟失了,並且在分散式下無法獲取其他節點的任務執行情況;另一種是儲存在資料庫中,並且將資料儲存在下面6張表裡:

  • BATCH_JOB_INSTANCE
  • BATCH_JOB_EXECUTION_PARAMS
  • BATCH_JOB_EXECUTION
  • BATCH_STEP_EXECUTION
  • BATCH_JOB_EXECUTION_CONTEXT
  • BATCH_STEP_EXECUTION_CONTEXT

3、pom.xml配置

<!-- batch依賴,負責批處理  -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-batch</artifactId>
</dependency>

相關推薦

Spring Boot Batch處理框架深入解讀

Spring Boot Batch批處理框架深入解讀 1、batch簡介 batch 是一款輕量的、全面的批處理框架,用於開發強大的日常運營的企業級批處理應用程式。 框架主要有以下功能: Transaction management(事務管理) Chunk base

Spring Batch處理框架初探

關於spring batch spring batch就是一個輕量級的批處理框架,他的輕量級是相對於MapReduce、Spark之類的叢集批處理架構來說的。雖然spring batch支援機器叢集,但是多用的是單機的多執行緒並行處理。 大家都知道MapRe

大資料處理框架Spring Batch 的全面解析

如今微服務架構討論的如火如荼。但在企業架構裡除了大量的OLTP交易外,還存在海量的批處理交易。在諸如銀行的金融機構中,每天有3-4萬筆的批處理作業需要處理。針對OLTP,業界有大量的開源框架、優秀的架構設計給予支撐;但批處理領域的框架確鳳毛麟角。是時候和我們一起來了解下批處理的世界哪些優秀的框架和設計了,今天

搭建處理框架問題總結Spring Batch + Spring Batch Admin + Quartz

Transaction Manager 事務管理器問題: 問題現象:在Tasklet中呼叫Dao  update更新資料,發現數據庫沒有變。 問題分析:猜測是沒有commit 原來,我用了spring batch admin作為批處理介面管理, 但是spring-batch

史上最輕鬆入門之Spring Batch - 輕量級處理框架實踐

從 MariaDB 一張表內讀 10 萬條記錄,經處理後寫到 MongoDB 。 Batch 任務模型 具體實現 1、新建 Spring Boot 應用,依賴如下: <!-- Web 應用 --> <dependency> <group

Spring BootSpring Batch 處理實踐

#### 實踐內容 從 MariaDB 一張表內讀 10 萬條記錄,經處理後寫到 MongoDB 。 #### 具體實現 1、新建 Spring Boot 應用,依賴如下: ```xml

通過例子講解Spring Batch入門,優秀的處理框架

# 1 前言 > 歡迎訪問[南瓜慢說 www.pkslow.com](https://www.pkslow.com/)獲取更多精彩文章! `Spring相關文章:`[Springboot-Cloud相關](https://www.pkslow.com/categories/springboot)

Spring Boot 全域性異常處理 與 Hibernate Validator校驗框架整合

Hibernate Validator校驗框架的使用 Spring boot已經集成了hibernate-validator,不需要引入maven,其他框架也可以自己引入: <dependency> <groupId>org.h

Spring Dataflow處理框架在OCP上的部署

詳細參考 https://donovanmuller.blog/spring-cloud-dataflow-server-openshift/docs/1.2.1.RELEASE/reference/htmlsingle/   注意事項: Openshift上需要部署service cata

DBUtils 框架的中batch處理使用

一、DBUtils 框架的使用     1、使用 dbutils 做增刪改查,批處理以及大文字操作     2、使用 DBUtils 框架管理事務。 (模擬銀行轉賬) 二、使用 JDBC 操作多個表     1、一對多(部門與員工)     2、多對多(學生和老師 學生與

spring batch處理分割槽讀取資料庫的例子

在spring batch批處理框架中,分割槽partitioning是指用多執行緒讀取一定範圍內的資料。比如,你的資料庫表中有100條記錄,有一個主鍵id,取值從1到100,你想處理這100條記錄.通常,使用1個執行緒,從1開始,一直到100.處理過程大概需要10分鐘。如

配置 Spring Batch 處理失敗重試機制

## 1. 引言 預設情況下,Spring批處理作業在執行過程中出現任何錯誤都會失敗。然而有些時候,為了提高應用程式的彈性,我們就需要處理這類間歇性的故障。 在這篇短文中,我們就來一起探討 **如何在Spring批處理框架中配置重試邏輯**。 ## 2. 簡單舉例 假設有一個批處理作業,它讀取一個CSV

Spring Boot? 統一異常處理

xtend import put itl ava advice efault ges spring 效果區: 代碼區: package com.wls.integrateplugs.exception.dto; public class ErrorI

Spring Boot 請求錯誤處理

.cn span .get final log cto imp pla mage 方法一:Spring Boot將所有的錯誤映射到/error,實現ErrorController接口 1 @Controller 2 @RequestMapping("/error")

Spring Boot靜態資源處理

內容 獲取request adapter 邏輯 keyword control 導致 match creat Spring Boot靜態資源處理 8.8 Spring Bo

spring boot 統一異常處理

res status fin erro throwable instance 拋出異常 方案 let 需求源自於任何一個業務的編寫總會有各種各樣的條件判斷,需要時時手動拋出異常,又希望讓接口返回友好的錯誤信息。 spring boot提供的幫助是自動將異常重定向到路由為/e

spring boot 預設的jackson框架轉換為fastjson

將spring boot 預設的jackson框架轉換為fastjson fastjson可以預設將下劃線引數轉換為駝峰屬性。 實現程式碼: 一、新增依賴 <dependency> <groupId>com.alibaba</groupId>

spring boot如何整合日誌框架

1.application.yml   logging: config: classpath:logback-boot.xml 2.logback-boot.xml配置 <?xml version="1.0" encoding="UTF-8"?> <

Spring Boot Actuator詳解與深入應用(一):Actuator 1.x

《Spring Boot Actuator詳解與深入應用》預計包括三篇,第一篇重點講Spring Boot Actuator 1.x的應用與定製端點;第二篇將會對比Spring Boot Actuator 2.x 與1.x的區別,以及應用和定製2.x的端點;第三篇將會介紹Actuator metric指

swagger2-spring-boot-starter自動化配置框架使用簡介

swagger2-spring-boot-starter整合框架使用簡介 簡介 該框架基於swagger2-2.9.2與SpringBoot-2.0.1版本進行搭建,相容SpringBoot2.x以上版本,不相容1.x版本,maven依賴如下: <dependency