SpringBatch 入門(mén)篇
示例項(xiàng)目地址 https://git.oschina.net/huicode/springbatch-learn
一、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)為廣大開(kāi)發(fā)者提供方便開(kāi)發(fā)的一套框架。
官方地址:github.com/spring-projects/spring-batch
- SpringBatch 本身提供了重試,異常處理,跳過(guò),重啟、任務(wù)處理統(tǒng)計(jì),資源管理等特性,這些特性開(kāi)發(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ù)庫(kù);
二、快速入門(mén):
1、 pom.xml 添加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
為什么在這里需要引入一個(gè)數(shù)據(jù)庫(kù),不引入數(shù)據(jù)庫(kù)包為什么會(huì)報(bào)錯(cuò)?
問(wèn)題的原因在這里:AbstractBatchConfiguration
源碼如下:@BatchConfiguration
是springbatch啟用的標(biāo)識(shí),AbstractBatchConfiguration
是該注解的具體邏輯處理,AbstractBatchConfiguration 中需要注入dataSources
,在沒(méi)database 為空的時(shí)候注入失敗,程序啟動(dòng)報(bào)錯(cuò)!
@Configuration
@Import(ScopeConfiguration.class)
public abstract class AbstractBatchConfiguration implements ImportAware {
@Autowired(required = false)
private Collection<DataSource> dataSources;
private BatchConfigurer configurer;
@Bean
public JobBuilderFactory jobBuilders() throws Exception {
return new JobBuilderFactory(jobRepository());
}
//。。。
}
2、創(chuàng)建BatchConfiguration(也可以是其他類名)
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableBatchProcessing
@EnableAutoConfiguration
public class BatchConfiguration {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.tasklet((contribution, chunkContext) -> null)
.build();
}
@Bean
public Job job(Step step1) throws Exception {
return jobBuilderFactory.get("job1")
.incrementer(new RunIdIncrementer())
.start(step1)
.build();
}
}
三、SpringBatch 的分層架構(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ā)等)
image.png
四、SpringBatch 執(zhí)行流程
image.png