SpringBatch-Demo1

官网介绍:Spring Batch Introduction

SpringBatch:就是将数据分批次进行处理的过程。比如:银行对账逻辑,跨系统数据同步等。

常规的批处理操作步骤:系统A从数据库中导出数据到文件,系统B读取文件数据并写入到数据库

 

  • Sping Batch 是一个轻量级的、完善的的批处理框架,旨在帮助企业建立健壮、高效的批处理应用。

  • Spring Batch 是Spring的一个子项目,基于Spring框架为基础的开发的框架

  • Spring Batch 提供大量可重用的组件,比如:日志,追踪,事务,任务作业统计,任务重启,跳过,重复,资源管理等

  • Spring Batch 是一个批处理应用框架,不提供调度框架,如果需要定时处理需要额外引入-调度框架,比如: Quartz

SpringBatch架构

Spring Batch 核心架构分三层:应用层,核心层,基础架构层。

Application:应用层,包含所有的批处理作业,程序员自定义代码实现逻辑。

Batch Core:核心层,包含Spring Batch启动和控制所需要的核心类,比如:JobLauncher, Job,Step等。

Batch Infrastructure:基础架构层,提供通用的读,写与服务处理。

批量处理流程

  1. JobLauncher启动一个Job,并将Job的控制权传递给JobRepository。

  2. JobRepository管理Job的执行状态和元数据,包括Job的名称、创建时间、最后一次执行时间、执行状态等。

  3. JobRepository创建一个JobExecution实例,表示该Job的一次执行,并将JobExecution的控制权传递给Job。

  4. Job包含一个或多个Step,每个Step定义了批量处理的一个独立的执行单元。Step包含三个组件:ItemReader、ItemProcessor和ItemWriter。

  5. ItemReader从外部资源中读取数据,例如文件、数据库等。读取的数据会被传递给ItemProcessor进行处理。

  6. ItemProcessor对读取的数据进行转换或者过滤操作,并将处理后的数据传递给ItemWriter。

  7. ItemWriter将处理后的数据写入到指定的输出目标中,例如文件、数据库等。

  8. Step将处理后的数据传递给Job,并通知Job该Step已经完成。

  9. 如果Job包含多个Step,则Job会依次执行每个Step,直到所有的Step都完成。

  10. 当Job的所有Step都完成后,JobExecution的状态会被更新,并通知JobLauncher。

  11. JobLauncher会收到JobExecution的状态更新信息,判断Job是否执行成功或者失败,如果Job执行失败,JobLauncher可以选择重新启动Job或者采取其他的措施。

入门案例

 

 

 引入web  和mysql驱动

application.properties

 启动类

package com.example.springbatch1;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.StepContribution;
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.JobLauncher;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
@EnableBatchProcessing
public class Springbatch1Application {
    //job调度器
    @Autowired
    private JobLauncher jobLauncher;
    //job构造器工厂
    @Autowired
    private JobBuilderFactory jobBuilderFactory;
    //step构造器工厂
    @Autowired
    private StepBuilderFactory stepBuilderFactory;
    //任务-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;
            }
        };
    }
    //作业步骤-不带读/写/处理
    @Bean
    public Step step1(){
        return stepBuilderFactory.get("step1")
                .tasklet(tasklet())
                .build();
    }
    //定义作业
    @Bean
    public Job job(){
        return jobBuilderFactory.get("hello-job")
                .start(step1())
                .build();
    }
    public static void main(String[] args) {
        SpringApplication.run(Springbatch1Application.class, args);
    }

}

新建库

 

猜你喜欢

转载自blog.csdn.net/tiantiantbtb/article/details/129756862