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 Boot 之 Spring 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