springbatch使用過程詳解
什么是 Spring Batch?
Spring Batch 是一個功能強大且可擴展的批量處理框架,旨在幫助開發(fā)者高效地處理大量數(shù)據(jù)的任務(wù)。它提供了一系列與批處理相關(guān)的功能,比如批量數(shù)據(jù)讀取、處理、寫入、事務(wù)管理、作業(yè)執(zhí)行和監(jiān)控等。Spring Batch 適用于需要在后臺處理大規(guī)模數(shù)據(jù)或定時任務(wù)的應(yīng)用,廣泛應(yīng)用于數(shù)據(jù)遷移、數(shù)據(jù)處理、批量報表生成等場景。
定義與特點
- 批量任務(wù)支持:Spring Batch 專注于批量任務(wù)的管理,包括任務(wù)的執(zhí)行、事務(wù)的處理、異常的管理、作業(yè)的調(diào)度等。
- 事務(wù)管理:內(nèi)置強大的事務(wù)支持,保證數(shù)據(jù)的一致性和完整性。在處理大量數(shù)據(jù)時,Spring Batch 能夠確保數(shù)據(jù)在多個步驟之間的可靠性。
- 高效性與可擴展性:針對大數(shù)據(jù)量的處理,Spring Batch 提供了流式讀取和寫入的能力,支持分片、并行處理等高效機制。
- 作業(yè)監(jiān)控與管理:Spring Batch 提供內(nèi)置的作業(yè)監(jiān)控功能,可以追蹤作業(yè)執(zhí)行狀態(tài)、查看歷史執(zhí)行記錄、獲取執(zhí)行細(xì)節(jié)。
常見應(yīng)用場景
- 數(shù)據(jù)遷移:將大量數(shù)據(jù)從一個數(shù)據(jù)庫遷移到另一個數(shù)據(jù)庫,或者從文件系統(tǒng)遷移到數(shù)據(jù)庫等。
- 批量數(shù)據(jù)處理:對海量數(shù)據(jù)進(jìn)行清洗、轉(zhuǎn)換和加載(ETL過程),例如從多個數(shù)據(jù)源合并數(shù)據(jù)到數(shù)據(jù)倉庫。
- 定時任務(wù)處理:處理定時生成的報告、日志分析、定期清理過期數(shù)據(jù)等。
- 數(shù)據(jù)同步:定時同步不同系統(tǒng)之間的數(shù)據(jù)。
背景:并發(fā)抽取接口數(shù)據(jù)。通過ai生成后調(diào)試了老半天才能使,記錄一下
主要是處理器Processor, 讀取器Reader和寫庫用的Writer

使用了框架的Shell功能,挺強大的。
如果要對接口讀取的數(shù)據(jù)做過濾,可以增加執(zhí)行參數(shù),如:–skip-filter

- 這個參數(shù)我是用在Processor中的,因為要對已經(jīng)獲取的數(shù)據(jù)進(jìn)行過濾。但其中要注意的點就是需要再處理器中獲取這個參數(shù)
public class ExamReportItemProcessor implements ItemProcessor<ExamReportDto, ExamReportEntity> {
@Autowired
private InpatientValidationService inpatientValidationService;
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
private boolean skipFilter = false;
@BeforeStep
public void beforeStep(StepExecution stepExecution) {
JobParameters jobParameters = stepExecution.getJobParameters();
String skipFilterStr = jobParameters.getString("skipFilter");
this.skipFilter = "true".equalsIgnoreCase(skipFilterStr);
}還要注意:并發(fā)執(zhí)行命令需要用到注解@StepScope,否則會陷入分批次拉數(shù)據(jù)卻只調(diào)用一次的尷尬, 調(diào)了許久
# 這是在BatchConfig.java中的配置
@Bean
@StepScope
public ExamReportItemReader examReportItemReader() {
return new ExamReportItemReader();
}
@Bean
@StepScope
public ExamReportItemProcessor examReportItemProcessor() {
return new ExamReportItemProcessor();
}另外我是用cursor的auto模式調(diào)試的,出現(xiàn)問題就將問題和輸入的命令進(jìn)行反饋,經(jīng)歷了4-5次才能跑通了
放個私有的gitee地址
過程記錄
# 使用curl檢測接口,使用的POST格式,(接口每次只返回一頁數(shù)據(jù)和總頁數(shù).為了方便,直接全部保存)
curl -X POST “http:xxxx“ -H "Content-Type: application/json" -d '{"StartTime": "2025-01-01 00:00:00"....}'
# 使用json_pp美化json語句,挺方便,沒有額外安裝工具
echo '{"name":"john","age":30}' | json_pp!74到此這篇關(guān)于springbatch使用過程詳解的文章就介紹到這了,更多相關(guān)springbatch使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java servlet結(jié)合Oracle搭建java的web開發(fā)環(huán)境
今天我將與大家分享一下我學(xué)JAVA WEB寫的一些小實例 ,我個人是不太喜歡書本上的晦澀的概念的,所以我花了更多的時間在一些應(yīng)用實例上,我覺得這樣的學(xué)習(xí)方式很適合我,由簡到繁,由淺入深2015-12-12
詳解利用Spring的AbstractRoutingDataSource解決多數(shù)據(jù)源的問題
本篇文章主要介紹了詳解利用Spring的AbstractRoutingDataSource解決多數(shù)據(jù)源的問題。具有一定的參考價值,有興趣的可以了解一下。2017-03-03
基于Java多線程notify與notifyall的區(qū)別分析
本篇文章對Java中多線程notify與notifyall的區(qū)別進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下2013-05-05
Java Management Extensions管理擴展原理解析
這篇文章主要介紹了Java Management Extensions管理擴展原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04
SpringBoot結(jié)合Redis實現(xiàn)序列化的方法詳解
Spring提供了一個RedisTemplate來進(jìn)行對Redis的操作,但是RedisTemplate默認(rèn)配置的是使用Java本機序列化。如果要對對象操作,就不是那么的方便。所以本文為大家介紹了另一種SpringBoot結(jié)合Redis實現(xiàn)序列化的方法,需要的可以參考一下2022-06-06
Spring操作JdbcTemplate數(shù)據(jù)庫的方法學(xué)習(xí)
這篇文章主要為大家介紹了Spring操作JdbcTemplate數(shù)據(jù)庫方法學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05

