Spring Batch入門教程篇
SpringBatch介紹:
SpringBatch 是一個(gè)大數(shù)據(jù)量的并行處理框架。通常用于數(shù)據(jù)的離線遷移,和數(shù)據(jù)處理,⽀持事務(wù)、并發(fā)、流程、監(jiān)控、縱向和橫向擴(kuò)展,提供統(tǒng)⼀的接⼝管理和任務(wù)管理;SpringBatch是SpringSource和埃森哲為了統(tǒng)一業(yè)界并行處理標(biāo)準(zhǔn)為廣大開發(fā)者提供方便開發(fā)的一套框架。
官方地址:github.com/spring-projects/spring-batch
- SpringBatch 本身提供了重試,異常處理,跳過,重啟、任務(wù)處理統(tǒng)計(jì),資源管理等特性,這些特性開發(fā)者看重他的主要原因;
- SpringBatch 是一個(gè)輕量級(jí)的批處理框架;
- SpringBatch 結(jié)構(gòu)分層,業(yè)務(wù)與處理策略、結(jié)構(gòu)分離;
- 任務(wù)的運(yùn)行的實(shí)例狀態(tài),執(zhí)行數(shù)據(jù),參數(shù)都會(huì)落地到數(shù)據(jù)庫;
快速入門
pom.xml 添加
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-batch</artifactId> </dependency>
創(chuàng)建BatchConfig(可以是其他類名)
@Configuration
@EnableBatchProcessing
public class BatchConfig {
// tag::readerwriterprocessor[]
@Bean
public FlatFileItemReader<Person> flatFileItemReader() {
FlatFileItemReader<Person> reader = new FlatFileItemReader<>();
reader.setResource(new ClassPathResource("sample-data.csv"));
FixedLengthTokenizer fixedLengthTokenizer = new FixedLengthTokenizer();
reader.setLineMapper(new DefaultLineMapper<Person>() {{
setLineTokenizer(new DelimitedLineTokenizer() {{
setNames(new String[]{"firstName", "lastName"});
}});
setFieldSetMapper(new BeanWrapperFieldSetMapper<Person>() {{
setTargetType(Person.class);
}});
}});
return reader;
}
@Bean
public JdbcPagingItemReader<Person> jdbcPagingItemReader(DataSource dataSource) {
JdbcPagingItemReader<Person> reader = new JdbcPagingItemReader<>();
reader.setDataSource(dataSource);
reader.setFetchSize(100);
reader.setQueryProvider(new MySqlPagingQueryProvider() {{
setSelectClause("SELECT person_id,first_name,last_name");
setFromClause("from people");
setWhereClause("last_name=:lastName");
setSortKeys(new HashMap<String, Order>() {{
put("person_id", Order.ASCENDING);
}});
}});
reader.setParameterValues(new HashMap<String, Object>() {{
put("lastName", "DOE");
}});
reader.setRowMapper(new BeanPropertyRowMapper<>(Person.class));
return reader;
}
@Bean
public JdbcBatchItemWriter<Person> jdbcBatchItemWriter(DataSource dataSource) {
JdbcBatchItemWriter<Person> writer = new JdbcBatchItemWriter<>();
writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>());
writer.setSql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)");
writer.setDataSource(dataSource);
return writer;
}
/*@Bean
public FlatFileItemWriter<Person> flatFileItemWriter(DataSource dataSource) {
FlatFileItemWriter<Person> writer = new FlatFileItemWriter<>();
writer.setAppendAllowed(true);
writer.setEncoding("UTF-8");
// writer.set(dataSource);
return writer;
}*/
// end::readerwriterprocessor[]
// tag::jobstep[]
@Bean
public Job importUserJob(JobBuilderFactory jobBuilderFactory, JobCompletionNotificationListener listener, Step step) {
return jobBuilderFactory.get("importUserJob")
.incrementer(new RunIdIncrementer())
.listener(listener)
.start(step)
.build();
}
@Bean
public Step step1(StepBuilderFactory stepBuilderFactory, PersonItemProcessor processor, ItemWriter jdbcBatchItemWriter, ItemReader flatFileItemReader) {
/*CompositeItemProcessor compositeItemProcessor = new CompositeItemProcessor();
compositeItemProcessor.setDelegates(Lists.newArrayList(processor, processor));*/
return stepBuilderFactory.get("step1")
.<Person, Person>chunk(10)
.reader(flatFileItemReader)
.processor(processor)
.writer(jdbcBatchItemWriter)
.build();
}
// end::jobstep[]
}
Spring Batch的分層架構(gòu)
- Insfrastructure 策略管理:包括任務(wù)的失敗重試,異常處理,事務(wù),skip,以及數(shù)據(jù)的輸入輸出(文本文件,DB,Message)
- Core: springBatch 的核心,包括JobLauch,job,step等等
- Application: 業(yè)務(wù)處理,創(chuàng)建任務(wù),決定任務(wù)的執(zhí)行方式(定時(shí)任務(wù),手動(dòng)觸發(fā)等)

Spring Batch執(zhí)行流程

總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- 源碼解析springbatch的job運(yùn)行機(jī)制
- spring中jdbcTemplate.batchUpdate的幾種使用情況
- spring?batch線上異常定位記錄
- Spring Batch 如何自定義ItemReader
- 詳解批處理框架之Spring Batch
- 手把手教你搭建第一個(gè)Spring Batch項(xiàng)目的步驟
- 基于Spring Batch向Elasticsearch批量導(dǎo)入數(shù)據(jù)示例
- Spring Batch讀取txt文件并寫入數(shù)據(jù)庫的方法教程
- 使用Spring?Batch實(shí)現(xiàn)大數(shù)據(jù)處理的操作方法
相關(guān)文章
Spring Cloud之遠(yuǎn)程調(diào)用OpenFeign參數(shù)傳遞
本文介紹了Spring Cloud中使用OpenFeign進(jìn)行遠(yuǎn)程調(diào)用時(shí),參數(shù)傳遞的不同方式,包括傳遞單個(gè)參數(shù)、多個(gè)參數(shù)、對(duì)象和JSON數(shù)據(jù),感興的朋友一起看看吧2025-03-03
springboot與數(shù)據(jù)庫返回?cái)?shù)據(jù)中文亂碼
大家好,本篇文章主要講的是springboot與數(shù)據(jù)庫返回?cái)?shù)據(jù)中文亂碼,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2022-01-01
java使用鏈表實(shí)現(xiàn)約瑟夫環(huán)
這篇文章主要為大家詳細(xì)介紹了java使用鏈表實(shí)現(xiàn)約瑟夫環(huán),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05
Java中Map實(shí)現(xiàn)線程安全的3種方式
本文主要介紹了Java中Map實(shí)現(xiàn)線程安全的3種方式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
spring-boot-plus V1.4.0發(fā)布 集成用戶角色權(quán)限部門管理(推薦)
這篇文章主要介紹了spring-boot-plus V1.4.0發(fā)布 集成用戶角色權(quán)限部門管理,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值需要的朋友可以參考下2019-11-11
SpringBoot項(xiàng)目中新增脫敏功能的實(shí)例代碼
項(xiàng)目中,由于使用端有兩個(gè),對(duì)于兩個(gè)端的數(shù)據(jù)權(quán)限并不一樣。Web端可以查看所有數(shù)據(jù),小程序端只能查看脫敏后的數(shù)據(jù),這篇文章主要介紹了SpringBoot項(xiàng)目中新增脫敏功能,需要的朋友可以參考下2022-11-11

