SpringBatch 入门篇

SpringBatch 入门篇

示例项目地址 https://git.oschina.net/huicode/springbatch-learn

一、SpringBatch介绍:

  • SpringBatch 是一个大数据量的并行处理框架。通常用于数据的离线迁移,和数据处理,⽀持事务、并发、流程、监控、纵向和横向扩展,提供统⼀的接⼝管理和任务管理;SpringBatch是SpringSource和埃森哲为了统一业界并行处理标准为广大开发者提供方便开发的一套框架。
    官方地址:github.com/spring-projects/spring-batch

  • SpringBatch 本身提供了重试,异常处理,跳过,重启、任务处理统计,资源管理等特性,这些特性开发者看重他的主要原因;
  • SpringBatch 是一个轻量级的批处理框架;
  • SpringBatch 结构分层,业务与处理策略、结构分离;
  • 任务的运行的实例状态,执行数据,参数都会落地到数据库;

二、快速入门:

1、 pom.xml 添加

        
            org.springframework.boot
            spring-boot-starter-batch
        
        
            mysql
            mysql-connector-java
        

为什么在这里需要引入一个数据库,不引入数据库包为什么会报错?
问题的原因在这里: AbstractBatchConfiguration 源码如下: @BatchConfiguration 是springbatch启用的标识,AbstractBatchConfiguration是该注解的具体逻辑处理,AbstractBatchConfiguration 中需要注入dataSources,在没database 为空的时候注入失败,程序启动报错!

@Configuration
@Import(ScopeConfiguration.class)
public abstract class AbstractBatchConfiguration implements ImportAware {

    @Autowired(required = false)
    private Collection dataSources;

    private BatchConfigurer configurer;

    @Bean
    public JobBuilderFactory jobBuilders() throws Exception {
        return new JobBuilderFactory(jobRepository());
    }
    
    //。。。
}

2、创建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 的分层架构

  • Insfrastructure 策略管理:包括任务的失败重试,异常处理,事务,skip,以及数据的输入输出(文本文件,DB,Message)
  • Core: springBatch 的核心,包括JobLauch,job,step等等
  • Application: 业务处理,创建任务,决定任务的执行方式(定时任务,手动触发等)
SpringBatch 入门篇_第1张图片
image.png

四、SpringBatch 执行流程

SpringBatch 入门篇_第2张图片
image.png

你可能感兴趣的:(SpringBatch 入门篇)