当前位置: 首页 > article >正文

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);
    }

}

新建库

 

 


http://www.kler.cn/a/4460.html

相关文章:

  • Redisson
  • 【数模学习笔记】插值算法和拟合算法
  • Level2逐笔成交逐笔委托毫秒记录:今日分享优质股票数据20250115
  • C#,图片分层(Layer Bitmap)绘制,反色、高斯模糊及凹凸贴图等处理的高速算法与源程序
  • QT在 MacOS X上,如何检测点击程序坞中的Dock图标
  • 解决 VSCode 调试时 Python 文件出现相对路径报错问题‘FileNotFoundError’
  • 多线程的几种状态
  • 2023最新版360度无死角python学习路线
  • Python提取文本文件中某个位置的数据
  • 简化代码,提高效率:C++ auto关键字的魅力
  • 短信宝接入发送短信实测 Java
  • 【操作系统】一文带你深入浅出零拷贝技术
  • Apache POI 入门·第一话
  • Autosar诊断-简介和功能概述
  • 网络基础知识
  • 应用层 —— HTTP协议
  • Spark大数据处理讲课笔记2.3 Spark运行架构与原理
  • Android的虚拟机垃圾回收解析,简单明了看完通透
  • Jython
  • 1652_MIT 6.828 shell例程重定向的实现分析
  • mysql隐式转换 “undefined“字符串匹配到mysql int类型0值字段
  • MySQL——锁
  • K8s CrashLoopBackOff 如何排障?
  • 如何注册Shopify商店
  • 汇编语言(1)——寄存器
  • 编写python的smtplib库发送邮件代码(简洁-原创)