spring batch 入门


github地址:

https://github.com/a18792721831/studybatch.git

文章列表:

spring batch 入门

spring batch连接数据库

spring batch元数据

spring batch Job详解

spring batch step详解

spring batch ItemReader详解

spring batch itemProcess详解

spring batch itemWriter详解

spring batch 作业流

spring batch 健壮性

spring batch 扩展性

spring batch 介绍

批处理

典型的批处理应该有以下几个特点:

  1. 自动执行,根据系统设定的工作步骤自动完成
  2. 数据量大,少则百万,多则千万甚至上亿
  3. 定时执行,如每天执行、每周或每月执行

从特点可以看出,批处理的流程可以明显的分为3个阶段:

  1. 读数据,读数据可能来自文件,数据库或消息队列
  2. 处理数据,处理读取的数据并下形成输出结果
  3. 写数据,将输出结果写入文件、数据库或消息队列

spring batch

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

Spring batch提供了打量可重用的组件,包括日志、追踪、事务、任务作业统计、任务重启、跳过、重复、资源管理。

对于大数据量和高性能的批处理任务,spring bach同样提供了高级功能和特性来支持,比如分区功能,远程功能。

spring batch是一个批处理应用框架,不是调度框架,但需要和调度框架合作来构建完成批处理任务。

spring batch 原理

spring batch 架构

spring batch核心架构分为三层:应用层、核心层、基础架构层。

image-20201105135630995

  • 应用层:包含所有的批处理作业,通过spring框架管理程序员的代码
  • 核心层:spring batch启动和控制所需要的核心类
  • 基础架构层:提供通用的读(ItemReader),写(ItemWriter)和服务处理

spring batch 优势

spring batch有如下优势:

  1. 丰富的开箱即用的组件:

    读:支持文本文件读、xml文件读、数据库读、jms队列读。。

    写:支持文本文件写、xml文件写、数据库写、jms队列写。。

  2. 面向Chunk的处理:

    面向Chunk的处理,支持多次读,一次写,避免了多次对资源得到写入,增加批处理的处理效率。

  3. 事务管理:

    spring batch框架默认采用spring提供的声明式事务管理模型。面向Chunk的操作支持事务管理,同时支持为每个tasklet操作设置细粒度的事务配置:隔离级别、传播行为、超时设置等。

  4. 元数据管理:

    spring batch框架自动记录job的执行情况,包括job的执行成功、失败、失败的异常信息,step的执行成功、失败、失败的异常信息,执行次数,重试次数,跳过次数,执行时间等,方便后期的维护和查看。

  5. 易监控的批处理应用:

    spring batch提供多种监控技术,支持对批处理操作的信息进行查看和管理,通过spring batch框架为批处理应用提供了灵活的监控模式:

    • 直接查看数据库
    • 通过spring batch提供的API查看
    • 通过spring batch admin查看
    • 通过jmx控制台查看
  6. 丰富的流程定义:

    spring batch框架支持顺序任务,条件分支任务,基于顺序和条件任务可以组织复杂的任务流程。同时spring batch支持复用已经定义的job或者step,同时提供job和step的继承能力和抽象能力。

  7. 健壮的批处理应用:

    spring batch框架支持作业的跳过,重试,重启能力,避免因错误导致批处理作业的异常中断:

    • 跳过(skip):通常在发生非致命异常的情况下,应该不中断批处理应用;
    • 重试(retry):发生瞬态异常情况下,应该能够通过重试操作避免该类异常,保证批处理应用的连续性和稳定性
    • 重启(restart):当批处理应用因错误发生错误后,应该能够在最后执行失败的地方重新启动 Job实例
  8. 易扩展的批处理应用:

    spring batch框架通过并发和并行技术实现应用的横向和纵向扩展机制,满足数据处理性能的需要。

    扩展机制包括:

    • 多线程执行一个Step
    • 多线程并行执行多个Step
    • 远程执行作业
    • 分区执行
  9. 复用企业现有代码

    spring batch框架提供多种Adapter能力,使得企业现有的服务可以方便集成到批处理应用中,避免重新开发。

spring batch 发展历程

spring batch 2.X 特性

  • 支持java 5

    支持java5提供的增强特性

  • 非顺序的Step支持

    image-20201105144857231

  • 面向Chunk处理

    spring batch 1.X的执行时序图

    image-20201105144909922

    spring batch 2.X的执行时序图

    image-20201105145006169

  • 逻辑结构优化

    spring batch 1.X的逻辑结构

    image-20201105145141636

    spring batch 1.X的代码组织结构

    image-20201105145234891

    spring batch 2.X的逻辑结构和代码结构

    image-20201105145306025

  • 强化元数据访问

    spring batch 2.X中,新增了JobExplorer和JobOperator,整体的关系图

    image-20201105145403447

  • 增强扩展性

    远程分块

    分区

  • 可配置

    spring batch 2.X增加了批处理的命名空间,简化了配置(对应的是xsd,也就是xml配置方式)

spring batch 2.2 新特性

  • 支持spring data 集成
  • 支持java配置
  • 重试模块重构
  • 作业参数变化

spring batch 3.0 新特性

  • JSR-352支持
  • 改进的Spring Batch Integration模块
  • 升级到支持Spring 4和Java 8
  • JobScope支持
  • SQLite支持

Spring Batch参考文档中文版

spring batch 4.1 新特性

  • 注解SpringBatchTest:用于更方便的测试batch组件
  • 注解EnableBatchIntegration:用于简化远程分块和分区配置
  • 支持json数据格式
  • 支持bean validation api验证项目
  • 支持jsr-305注解
  • FlatFileItemWriterBuilderAPI的增强功能

Spring Batch 4.1 正式发布,带来了大量新特性

spring batch 4.2 新特性

  • 使用 Micrometer 来支持批量指标(batch metrics)
  • 支持从 Apache Kafka topics 读取/写入(reading/writing) 数据
  • 支持从 Apache Avro 资源中读取/写入(reading/writing) 数据
  • 改进支持文档

Spring Batch 4.2 新特性

spring batch 3.0 新特性

  • 新增SynchronizedStreamWriter
  • 新增JpaQueryProvider,JpaCursorItemReader
  • 新增JobParameterIncrementer
  • GraalVM支持
  • Java记录支持

What’s New in Spring Batch 4.3

spring batch hello world

创建一个spring batch 的hello world非常的简单。

在spring batch的quick start 就有实例

Creating a Batch Service

创建项目

在ide中选择创建spring项目

选择gradle项目,jdk11

image-20201105153527740

选中spring batch

image-20201105153544670

因为spring batch还需要存储元数据,所以,还需要一个数据库

image-20201105153640539

创建job

项目创建完成后,等待依赖下载。

然后创建job

image-20201105153801308

在HelloJobConf上需要加上注解,并且注入操作spring batch元数据的接口

image-20201105153845446

创建ItemReader,因为批处理,如果一直有数据,会一直执行下去,所以,我们需要一个变量来标识退出批处理的时机

image-20201105154412813

image-20201105154242396

可以看到,我们只想批处理20次,reader读取的是字符串。

创建ItemProcess,process里面我们什么都不做,打印reader的字符串。

image-20201105154357374

创建ItemWriter,writer里面也只是打印

image-20201105154447218

创建执行步step

image-20201105154616045

创建job

image-20201105154707623

启动

直接启动spring boot main类即可

image-20201105154802391

可以看出来,10个一批,和我们在chunk中定义的一样。

image-20201105154820053

第21个结束,共3批

image-20201105154918264

怎么区分批?

chunk是多次读,一次写,所以,每次写读的分界线就是一批。

10个一批,集中写数据。

猜你喜欢

转载自blog.csdn.net/a18792721831/article/details/109514091