只能靠写博客来鞭策自己学习了

  • Spring Batch 简介
    • what‘s 批处理
    • 批处理的特点
    • spring batch 的好基友
  • spring batch 集成 spring boot 的入门程序
    • maven 配置
    • application 启动类
    • 配置数据库
    • JobConfig

最近公司项目要用spring batch,之前这块知识开始空白,大概的学习了之后能看懂公司项目上的代码,公司用这个框架的地方还是挺多的,所以就想多了解一点了,知其然也想知其所以然,所以开个帖子写写顺便记录一下吧,欢迎勘误。

Spring Batch 简介

what‘s 批处理

关于 spring batch 的简介,官方说法,网上随便一搜就有,这里就不再赘述了,大概就是批量处理数据的一种轻量级框架,通常不需要人工参与就能够自动高效的进行复杂的数据处理和分析。如:定期对大量数据进行业务数据处理,或者从内部系统或者外部系统获得的数据进行处理后集成到其他系统中,这样的工作都叫“批处理”。

批处理的特点

典型的批处理应用一般都有这样的特点:

  • 自动执行,根据系统设定的步骤自动执行。
  • 数据量大,通常是百万千万或者亿级。
  • 定时执行,每天、每周、定时的执行。

整个流程一共分为三个阶段:

  1. 读数据,数据可以来自文件、数据库、消息队列等;
  2. 处理数据,处理读取的数据,并生成处理结果。
  3. 写数据,把处理后的数据写入文件、数据库、消息队列等。

spring batch 的好基友

spring batch 只是一个批处理的应用框架,没有调度功能,一般需要和调度框架进行合作来构建完成批处理任务。它只关注批处理任务相关的问题,如事务、并发、监控、执行等,并不提供相应的调度功能。如果需要使用调度框架,可以和很多优秀的调度框架一起使用,如 Quartz 等。

spring batch 集成 spring boot 的入门程序

多叨叨几句:最近找 spring batch 的书籍,发现国内还很少,只有刘相写的一本《spring batch 批处理框架》,内容很全面还是版本有些老,很多 spring 的 xml 配置看上去有点难以接受,毕竟习惯了 spring boot,然后去各种网站论坛找相应的资料,发现也是有一些入门程序的实例,跟着也比较容易完成,但是内容不够丰富,进阶的知识没有过多介绍,在 b 站找到一部视频,如获至宝,看了发现也是以入门为主,正好我需要学习这个框架也想深入了解一下,想着把学习踩坑的过程记录一下,加深学习印象,同时也想把这个框架更全面的进行理解,如果能坚持下来做成系列文章,也能给不少人解答疑惑,也希望这样能鞭策我多学习一点知识。我想学到后边为了完成文章可能就会逼自己去 spring 官网去看英文的文档了吧。加油。

maven 配置

话不多说,先进行 maven 的 pom 配置,创建 maven 项目,我的 idea 是 2020.2 版,maven 的配置让我恼火了好几天,每次配置完下次打开 maven 的文件路径就变了,好像是 idea 版本新 bug,spring boot 还总是爆红,搞了好久发现并不会影响运行,(治好了我的强迫症)。

这是我的 maven/pom.xml 文件的配置依赖,这里只放了<parent>和<dependency>,其他的可根据自己的项目自行配置。

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.5.RELEASE</version>
</parent>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>
<dependency><groupId>org.springframework.batch</groupId><artifactId>spring-batch-test</artifactId><scope>test</scope>
</dependency>

application 启动类

配置完成后,添加一个 springboot 启动类,我创建了一个 pers.buyusan.batch 包,在包下创建了 SpringBatchApplication 类:

@SpringBootApplication
public class SpringBatchApplication {public static void main(String[] args) {SpringApplication.run(SpringBatchApplication.class, args);}
}

直接运行,发现报错,需要 database,于是乎再配置数据库。

配置数据库

我用的 mysql,首先添加依赖:

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

配置数据源,我习惯 yaml 文件:

spring:datasource:url: jdbc:mysql://localhost:3306/springbatch?characterEncoding=utf8&serverTimezone=UTCdriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: rootschema: classpath:/org/springframework/batch/core/schema-mysql.sqlbatch:initialize-schema: always

注意事项:这里踩坑了,配置数据库 driver 时,由于我的 jdbc 版本比较高,所以这里用cj的驱动,而且需要在 url 后边加上serverTimezone=UTC。另外 schema 配置 batch 自带的 sql 脚本,运行后,框架会自动在数据库中创建默认的表,用来记录 job 和 step 的执行过程和时间。
再次启动程序,就可以顺利执行了。

JobConfig

spring batch 是通过 job,也就是任务,作为任务执行的容器,所以要先生成 job 对象,通过框架提供的 JobBuildFactory 类,有了 job 后,每个任务都要分步骤执行,也就是 step 对象,step 对象通过 StepBuildFactory 类去创建。step 的执行可以通过两种方式:chunk 和 tasklet。我先用 tasklet 方式进行一个简单 helloworld 的输出任务编写。

创建 config 包,在包中创建一个 JobConfiguration 类。

@Configuration
@EnableBatchProcessing
public class JobConfiguration {//注入创建任务对象的对象@Autowiredprivate JobBuilderFactory jobBuilderFactory;//任务的执行由 step 决定//注入创建 step 对象的对象@Autowiredprivate StepBuilderFactory stepBuilderFactory;//创建任务对象@Beanpublic Job helloWorldJob(){return jobBuilderFactory.get("helloWorldJob").start(step1()).build();}@Beanpublic Step step1() {return stepBuilderFactory.get("helloWorldStep").tasklet((contribution, chunkContext) -> {System.out.println("hello world");return RepeatStatus.FINISHED;}).build();}
}

现在为止,我的目录结构如下:

运行启动类后,可以看到程序顺利执行:

再去数据库看一下表,spring batch已经自动创建了好几张表,如图:

打开batch_job_execution可以看到

打开batch_job_instance可以看到

打开batch_step_execution可以看到

刚刚执行的记录已经都在里面生成啦。
佛系写手又上线了,蟹蟹您的支持,一起加油吼。

Spring batch系列文章(一)——介绍和入门相关推荐

  1. openGauss数据库源码解析系列文章——openGauss开发快速入门(二)

    在上一篇openGauss数据库源码解析系列文章--openGauss开发快速入门(上)中,我们介绍了openGauss的安装部署方法,本篇将具体介绍openGauss基本使用. 二. openGau ...

  2. 数学建模-MATLAB算法精讲系列文章目录介绍(持续补充ing)

    前言 结合实际案例,从算法背景开始一步步到最终代码实现,本系列文章主要以matlab代码为主,为照顾学习其他编程语言的小伙伴,大部分算法会附带python.Java.C++.R语言等市面上主流代码,满 ...

  3. 跟我学spring security系列文章第一章 实现一个基本的登入

    文章目录 指定依赖 安全配置 添加controller测试代码 测试 源码地址: https://github.com/pony-maggie/spring-security-learn 指定依赖 s ...

  4. Spring Boot 系列(一)快速入门

    简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置 ...

  5. [Spring+Hibernate系列]2.项目介绍与首个MVC实例

    1. 项目介绍 简单起见: 项目背景定义为一个学生成绩查询系统. 涉及到的实体类: 学生 老师 课程 学生课程成绩(关系表) 涉及到的操作: 学生信息查询.增加.修改.删除 老师信息查询.增加.修改. ...

  6. openGauss数据库源码解析系列文章——openGauss开发快速入门(一)

    作为openGauss数据库开发者,在基于开源社区的openGauss版本进行二次开发的过程中,需要完成软件包获取.源码了解.代码修改.编译发布等过程,同时还需要安装数据库以了解数据库的基本特点.验证 ...

  7. 使用 Spring Batch 构建企业级批处理应用

    https://www.ibm.com/developerworks/cn/java/j-lo-springbatch1/index.html https://www.ibm.com/develope ...

  8. Spring batch 2.0例子(lineMapper)

    http://www.ibm.com/developerworks/cn/java/j-lo-springbatch1/ 使用 Spring Batch 构建企业级批处理应用: 第 1 部分 刘 光瑞 ...

  9. Spring batch Job define

    http://www.ibm.com/developerworks/cn/java/j-lo-springbatch1/ 总述 本系列文章旨在通过示例搭建以及特性介绍,详细讲述如何利用 Spring ...

最新文章

  1. 通过浏览器navigator判断浏览器版本或者手机类型判断微信访问
  2. 一文了解web无状态会话token技术JWT
  3. TabActivity中的Tab标签详细设置
  4. 位置问题_改变铸件浇注入水位置,能解决哪些问题?
  5. Windows启动管理器
  6. Sketch vs. Figma vs. adobe xd:哪个设计工具最适合初学者?
  7. 用PHP的GD库绘制弧形图像
  8. JFreechart 在linux下不显示及中文乱码问题
  9. homework-06
  10. (Photo Metadata Remover)Android App 一键去除照片 EXIF 隐私信息
  11. 一文弄懂LogSumExp技巧
  12. 深入解读Linux进程调度系列(1)——调度的初始化
  13. CentOS 6.6 HAProxy安装配置指南
  14. 什么是servlet?servlet的运行原理?如何自定义一个servlet?
  15. PSAM卡、SAM卡、SIM卡
  16. HCIA物联网初级考试-第二章物联网常用的通信技术
  17. 用卷积神经网络实现笑脸、非笑脸表情识别
  18. 微信小程序 textarea读取到的文本换行问题 以及保存回车换行到后台
  19. 音视频常见术语和接口收集
  20. ios 判断手机角度_iOS 角度获取及旋转

热门文章

  1. C语言程序设计-鸡兔同笼问题
  2. ## Python笔记
  3. #459 津津有味:北方人对饺子的痴迷可能是刻进骨子里的
  4. Confluence团队协同工具使用文档
  5. Datawhale组队学习 Task05:字符串(2天)
  6. 备战双11,送你一份解压壁纸!
  7. 基于SG90舵机(伺服电机)的操作笔记
  8. 我爱天文 - 秋季有大三角吗?
  9. 什么SEO内容可以吸引外部链接
  10. Python平板电脑数据分析-课程大作业-部分源码