Spring batch批處理框架
spring batch框架的簡介
批處理任務(wù)是大多數(shù)IT項目的一個重要組成部分,批處理在業(yè)務(wù)系統(tǒng)中負(fù)責(zé)處理海量的數(shù)據(jù),無須人工干預(yù)就能夠自動高效的進(jìn)行復(fù)雜的數(shù)據(jù)分析和處理。批處理會定期讀入批量數(shù)據(jù),經(jīng)過相應(yīng)的業(yè)務(wù)處理進(jìn)行歸檔的業(yè)務(wù)操作,批處理的特征是自動執(zhí)行,處理的數(shù)據(jù)量大,定時執(zhí)行。將整個批處理的流程按邏輯劃分可以分為讀數(shù)據(jù),處理數(shù)據(jù)和寫數(shù)據(jù)。
spring batch對批處理本身的特性進(jìn)行了抽象,將批處理作業(yè)抽象為job和job step,將批處理的處理過程分解為數(shù)據(jù)讀,數(shù)據(jù)處理和數(shù)據(jù)寫。
將異常處理機(jī)制分為跳過,重啟和重試。將作業(yè)的分區(qū)分為多線程,并行遠(yuǎn)程和分區(qū)。
spring batch不是一個調(diào)度框架,但需要調(diào)度框架來配合完成批處理任務(wù),它只關(guān)注批處理相關(guān)的任務(wù)問題,但沒有提供相應(yīng)的調(diào)度功能,如果需要使用調(diào)度功能,需要使用調(diào)度框架,這里介紹一個比較常用的調(diào)度框架quartz,可以配合spring batch完成批處理的任務(wù)調(diào)度。
spring batch的架構(gòu)分為三層:基礎(chǔ)架構(gòu)層,核心層和應(yīng)用層。應(yīng)用層包含所有的批處理作業(yè),核心層主要提供JobLauncher、Job和step,基礎(chǔ)架構(gòu)層主要提供通用的讀(ItemReader)、寫(ItemWriter)和服務(wù)處理(如:RetryTemplate重試模板;RepeatTemplate:重復(fù)模板),Spring
batch的三層架構(gòu)體系使得Spring batch框架可以在不同的層級進(jìn)行擴(kuò)展,避免不同層級之間的相互影響。
job的介紹
批處理的作業(yè)是由一組step組成,同時job本身也是配置文件的頂級元素。每個作業(yè)都有自己的名字,可以定義step的執(zhí)行順序,以及定義作業(yè)是否可以重啟。job執(zhí)行的時候會生成一個job instance(作業(yè)實例)和一個job execution(作業(yè)執(zhí)行器)。job instance包含執(zhí)行job期間產(chǎn)生的數(shù)據(jù)以及job執(zhí)行的狀態(tài)信息;1個job可以對應(yīng)多個job instance,1個job instance可以對應(yīng)多個job execution。
job的配置的主要屬性有id(作業(yè)的唯一標(biāo)識)、job-repository(定義作業(yè)倉庫)、incrementer(作業(yè)參數(shù)遞增器)、restartable(作業(yè)是否重啟)、parent(指定該作業(yè)的父作業(yè))、abstract(定義作業(yè)是否抽象)。
step的介紹
step表示作業(yè)中一個完整的步驟,一個job可以由一個或者多個step組成,step主要負(fù)責(zé)批處理運行過程中的主要業(yè)務(wù)邏輯的實現(xiàn)。每次step執(zhí)行的時候會生成一個或者多個job execution,每次任務(wù)執(zhí)行失敗的時候,等到下次重新執(zhí)行該任務(wù)的時候就會為該任務(wù)的step重新生成一個step execution。
step可以配置tasklet、partition、job、flow。
step一般主要配置itemReader、itemProcess和itemWriter來完成批處理的業(yè)務(wù)邏輯處理。
job repository的介紹
job repository主要用來存儲job運行期間的元數(shù)據(jù)(這些元數(shù)據(jù)包括job instance、job execution、job parameters、step execution、execution context等數(shù)據(jù))。
spring batch框架進(jìn)行元數(shù)據(jù)管理的時候共有9張表,其中有3張表(后綴是SEQ)用來分配主鍵的,這9張表分別是
BATCH_JOB_INSTANCE:作業(yè)實例表
BATCH_JOB_EXECUTION:作業(yè)執(zhí)行器表
BATCH_JOB_EXECUTION_PARAMS:作業(yè)參數(shù)表
BATCH_STEP_EXECUTION:作業(yè)步執(zhí)行器表
BATCH_JOB_EXECUTION_CONTEXT:作業(yè)執(zhí)行上下文表
BATCH_STEP_EXECUTION_CONTEXT:作業(yè)步執(zhí)行上下文表
BATCH_JOB_EXECUTION_SEQ:作業(yè)執(zhí)行器序列表
BATCH_STEP_EXECUTION_SEQ:作業(yè)步序列表
BATCH_JOB_SEQ:作業(yè)序列表
itemReader的介紹
itemReader是Step中對資源的讀處理,Spring batch框架提供了大量的直接可用的讀組件可以快速的完成批處理應(yīng)用的開發(fā)和構(gòu)建,同時框架也提供了較好的復(fù)用和擴(kuò)展組件,開發(fā)者可以自定義實現(xiàn)。
ListItemReader:讀取List數(shù)據(jù),只能讀一次。
ItemReaderAdapter:ItemReader適配器,可以復(fù)用現(xiàn)有的讀操作。
FlatFileItemReader:讀Flat類型文件。
StaxEventItemReader:讀XML類型文件。
JdbcCursorItemReader:基于JDBC游標(biāo)方式讀數(shù)據(jù)庫。
HibernateCursorItemReader:基于hibernate游標(biāo)方式讀取數(shù)據(jù)庫。
StoredProcedureItemReader:基于存儲過程讀取數(shù)據(jù)庫。
IbatisPagingItemReader:基于Ibatis分頁讀取數(shù)據(jù)庫。
JpaPagingItemReader:基于jpa方式分頁讀取數(shù)據(jù)庫。
JdbcPagingItemReader:基于jdbc方式分頁讀取數(shù)據(jù)庫。
HibernatePagingItemReader:基于Hibernate方式分頁讀取數(shù)據(jù)庫。
JmsItemReader:讀取jms隊列。
IteratorItemReader:迭代方式的讀組件。
MultiResourceItemReader:多文件讀取組件。
MongoItemReader:基于分布式存儲MongoDB讀組件。
Neo4jItemReader:面向網(wǎng)格數(shù)據(jù)庫Neo4j讀組件。
ResourcesItemReader:基于批量資源的讀組件。
AmqpItemReader:讀取AMQP隊列組件。
RepositoryItemReader:基于Spring Data的讀組件。
itemProcess的介紹
itemProcess階段表示對讀取數(shù)據(jù)進(jìn)行處理,開發(fā)者可以在這里面實現(xiàn)自己的業(yè)務(wù)操作。
CompositeItemProcessor:組合處理器,可以封裝多個業(yè)務(wù)處理服務(wù)。
ItemProcessorAdapter:適配器,可以復(fù)用現(xiàn)有的業(yè)務(wù)處理服務(wù)。
PassThroughItemProcessor:不做業(yè)務(wù)處理,直接返回讀取數(shù)據(jù)。
ValidatingItemProcessor:數(shù)據(jù)校驗處理器,支持對數(shù)據(jù)的校驗,如果校驗不通過可以進(jìn)行過濾或者跳過skip的方式來處理記錄。
itemWriter的介紹
itemWriter是step中對資源的寫處理,Spring batch框架提供了大量的直接可用的寫組件可以快速的完成批處理應(yīng)用的開發(fā)和構(gòu)建,同時框架也提供了較好的復(fù)用和擴(kuò)展組件,開發(fā)者可以自定義實現(xiàn)。
FlatFileItemWriter:寫flat類型文件。
MultiResourceItemWriter:多文件寫組件。
StaxEventItemWriter:寫XML類型文件。
AmqpItemWriter:寫AMQP類型消息。
ClassifierCompositeItemWriter:根據(jù)Classifier路由不同的Item到特定的ItemWriter處理。
HibernateItemWriter:基于Hibernate方式寫數(shù)據(jù)庫。
IbatisBatchItemWriter:基于Ibatis方式寫數(shù)據(jù)庫。
ItemWriterAdapter:適配器,可以復(fù)用現(xiàn)有的寫服務(wù)。
JdbcBatchItemWriter:基于JDBC方式寫數(shù)據(jù)庫。
JmsItemWriter:寫JMS隊列。
JpaItemWriter:基于jpa方式寫數(shù)據(jù)庫。
GemfireItemWriter:基于分布式數(shù)據(jù)庫Gemfire的寫組件。
SpELMappingGemfireItemWriter:基于spring表達(dá)式語言寫分布式數(shù)據(jù)庫Gemfire的組件。
MimeMessageItemWriter:發(fā)送郵件的寫組件。
MongoItemWriter:基于分布式文件存儲數(shù)據(jù)庫MongoDB寫組件。
Neo4jItemWriter:面向網(wǎng)絡(luò)數(shù)據(jù)庫Neo4j的讀組件。
PropertyExtractingDelegatingItemWriter:屬性抽取代理寫組件。
RepositoryItemWriter:基于Spring Data的寫組件。
SimpleMailMessageItemWriter:發(fā)送郵件的寫組件。
CompositeItemWriter:條目寫的組合模式,支持組裝多個ItemWriter。
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關(guān)文章
詳解使用Spring Cloud Consul實現(xiàn)服務(wù)的注冊和發(fā)現(xiàn)
這篇文章主要介紹了詳解使用Spring Cloud Consul實現(xiàn)服務(wù)的注冊和發(fā)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06
Spring Boot整合Spring Data JPA過程解析
這篇文章主要介紹了Spring Boot整合Spring Data JPA過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-10-10
JDBC的基本操作與Statement和PreparedStateMent使用區(qū)別分析
這篇文章主要介紹了JDBC的基本操作與Statement和PreparedStateMent使用區(qū)別,Java Database Connectivity,它是代表一組獨立于任何數(shù)據(jù)庫管理系統(tǒng)(DBMS)的API,聲明在java.sql與javax.sql包中,是SUN(現(xiàn)在Oracle)提供的一組接口規(guī)范2023-04-04
詳解如何在Java項目中實現(xiàn)信號的連續(xù)接收
在Java項目中,信號的連續(xù)接收是一項重要的任務(wù),特別是在處理異步事件或者需要對外部事件做出響應(yīng)時,本篇博客將介紹如何在Java項目中實現(xiàn)信號的連續(xù)接收,包括信號的監(jiān)聽、處理和停止等步驟,需要的朋友可以參考下2023-11-11
springboot集成screw反向生成數(shù)據(jù)庫說明文檔
screw是一個一鍵式生成數(shù)據(jù)庫文檔的開源工具包,目前screw可以生成word、md和html格式類的文檔,本文主要來講講如何通過screw反向生成數(shù)據(jù)庫說明文檔,感興趣的可以了解下2025-01-01
關(guān)于Intellij IDEA中的Version Control問題
這篇文章主要介紹了Intellij IDEA中的Version Control問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-11-11

