目录

引言

案例解析

@EnableBatchProcessing

配置数据库四要素

创建Tasklet对象

创建Step对象

创建Job并执行Job

转视频版


引言

书接上篇 Spring Batch 批处理入门案例,上篇带小伙伴们写了一个Spring Batch 入门案例,里面有哪些注意要点呢?本篇一起来分析分析~

案例解析

整个入门案例核心点有5个,一一来讲解一下

@EnableBatchProcessing

批处理启动注解,要求贴配置类或者启动类上


@SpringBootApplication
@EnableBatchProcessing
public class HelloJob {
    ...
}


贴上@EnableBatchProcessing注解后,SpringBoot会自动加载JobLauncher JobBuilderFactory StepBuilderFactory 类并创建对象交给容器管理,要使用时,直接@Autowired即可


//job调度器
@Autowired
private JobLauncher jobLauncher;
//job构造器工厂
@Autowired
private JobBuilderFactory jobBuilderFactory;
//step构造器工厂
@Autowired
private StepBuilderFactory stepBuilderFactory;


配置数据库四要素

批处理允许重复执行,异常重试,此时需要保存批处理状态与数据,Spring Batch 将数据缓存在H2内存中或者缓存在指定数据库中。入门案例如果要保存在MySQL中,所以需要配置数据库四要素

创建Tasklet对象


//任务-step执行逻辑由tasklet完成
@Bean
public Tasklet tasklet(){
    return new Tasklet() {
        @Override
        public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
            System.out.println("Hello SpringBatch....");
            return RepeatStatus.FINISHED;
        }
    };
}


Tasklet负责批处理step步骤中具体业务执行,它是一个接口,有且只有一个execute方法,用于定制step执行逻辑。


public interface Tasklet {
	RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception;
}


execute方法返回值是一个状态枚举类:RepeatStatus,里面有可继续执行态与已经完成态


public enum RepeatStatus {
	/**
	 * 可继续执行的-tasklet返回这个状态会进入死循环
	 */
	CONTINUABLE(true), 
	/**
	 * 已经完成态
	 */
	FINISHED(false);
    ....
}


创建Step对象


//作业步骤-不带读/写/处理
@Bean
public Step step1(){
    return stepBuilderFactory.get("step1")
        .tasklet(tasklet())
        .build();
}


Job作业执行靠Step步骤执行,入门案例选用最简单的Tasklet模式,后续再讲Chunk块处理模式。

创建Job并执行Job


//定义作业
@Bean
public Job job(){
    return jobBuilderFactory.get("hello-job")
        .start(step1())
        .build();
}


创建Job对象交给容器管理,当springboot启动之后,会自动去从容器中加载Job对象,并将Job对象交给JobLauncherApplicationRunner类,再借助JobLauncher类实现job执行。

验证过程:

打断点,debug模式启动

spring batch如何并行 spring batch例子_batch

点击下一步,进入

SpringApplication类run方法  

spring batch如何并行 spring batch例子_hello world_02

spring batch如何并行 spring batch例子_spring batch如何并行_03

spring batch如何并行 spring batch例子_hello world_04

 再进进入run方法

JobLauncherApplicationRunner类

spring batch如何并行 spring batch例子_batch_05

spring batch如何并行 spring batch例子_batch_06

spring batch如何并行 spring batch例子_hello world_07

 

spring batch如何并行 spring batch例子_springboot_08

 再进入一步

JobLauncher接口--实现类:SimpleJobLauncher

spring batch如何并行 spring batch例子_springboot_09

 到这,Spring Batch 入门案例分析就结束~

转视频版