![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spring batch
苍鹰蛟龙
这个作者很懒,什么都没留下…
展开
-
根据http://start.spring.io/生成项目工程
对于需要spring的工程,可以在http://start.spring.io/网站生成需要的工程,然后导入eclipse中。 步骤如下: 一、从http://start.spring.io/生成项目工程 1、框1中选中管理工具,目前选用的是用的比较多的maven来管理项目; 2、框2中选择项目的开发语言; 3、框3选中spring boot的版本; 4、框4中项目的唯一标识; 5、选原创 2018-02-26 10:38:04 · 7107 阅读 · 0 评论 -
数据写入——写入到数据库中
spring batch提供了JdbcBatchItemWriter类,用来把数据写入到数据库中。 示例:本例把下面的User.txt文件中的数据保存到Mysql数据库中。ID,NAME,AGE1,lzj,282,tom,203,terry,304,lerry,185,bob,256,linda,277,marry,398,long,229,kin,3310,jiken,40在原创 2018-03-11 17:31:37 · 8397 阅读 · 0 评论 -
异常处理——skip
在一个step中,不管reader还是process,还是write,出现了指定的错误都可以跳过,继续执行后面的数据。 @Bean public Step chunkStep(){ return stepBuilderFactory.get("chunkStep1") .chunk(3)原创 2018-03-22 22:41:12 · 505 阅读 · 0 评论 -
异常处理——restart重启
当spring batch批处理时遇到异常,可以采用如下方式一、restart1、在job中阻止重启 //job //在job中设置了preventRestart会阻止job重启,第一次不管执行成功还是失败,都不会重启第二次 @Bean public Job fileReaderJob(){ return jobBuilderFactory.get("f原创 2018-03-19 23:47:07 · 3072 阅读 · 0 评论 -
异常处理——retry
当spring batch在处理批量时,有时因为某些原因,使批量在第一次执行时出错,比如锁表之类的,出错之后,可以进行多次执行出错的地方。 //job @Bean public Job fileReaderJob(){ return jobBuilderFactory.get("fileReaderJob") .start(chunkStep()原创 2018-03-20 23:13:39 · 592 阅读 · 0 评论 -
作业优化——在step中使用多线程
假设一个step中要执行一项读数据、然后处理数据,最后写数据的任务,如果数据非常大,需要很长的一段的时间才能处理完,此种情况下就可以创建多个线程来同时执行该任务,缩短任务的执行时间。但是要在读的任务上加 Synchronized 标识,保证同一个时刻只有一个线程在读,使每个线程读取的数据不一样。如果不加Synchronized,有可能两个线程在同时读数据,读的数据会有部分重叠,影响数据的处理。在sp原创 2018-03-25 17:27:50 · 995 阅读 · 1 评论 -
作业优化——在step中使用异步操作
异步处理就是:如果一条数据正在处理,后面又来了一条数据,可以不用等前面的数据处理完进行处理。异步处理也是用多线程实现的,但与上章节在step中使用多线程有所不同,多线程方式:每个线程处理一批数据,互不干扰,开辟晚的线程有可能比开辟早的线程先执行完毕;异步方式:异步方式按读取数据的先后顺序执行,读取一批数据后交给线程处理,又读取一批数据后,如果前面的数据还没执行完毕,可以不用等待,从线程池中拿新的线程原创 2018-03-25 19:59:11 · 659 阅读 · 0 评论 -
监听器Listener
在spring batch中主要以以下四种监听器为主:Step监听器 :监听step的执行开始和结束;Job监听器 :监听job的执行开始和结束;SkipListener监听器 :在读、处理、写的过程中,监听跳过的异常;ChunkListener监听器 :监听的chunk的执行开始和结束,或者监听chunk出错。一、Step监听器首先创建一个step监听器,实现StepExe...原创 2018-03-25 22:03:11 · 762 阅读 · 4 评论 -
作业优化——本地分区
在批处理的时候,如果要读取的文件或数据库非常大,执行一个批处理会花非常长的时间,此时考虑本地分区比较合理。本地分区:把要读取的非常大的文件或数据库表分成不同的块,然后启动多个线程处理这些分成的块。spring batch提供了Partitioner接口来实现划分分区,下面以读取数据库表为例,把库表划分成不同的块进行读取进行处理。 user表: 首先实现Partitioner类,对库表进行分区,按原创 2018-04-01 10:47:22 · 475 阅读 · 1 评论 -
基于xml方式配置spring batch
从平面文件(Flat File)中批量读取数据 章节用的是编码方式配置spring batch的job任务的,本节就是把上篇博客中job任务改成基于xml配置的方式配置job,因为公司中现在很大一部分还是用的xml方式配置job。案例:还是读取User.txt文件中数据,并把每条数据中满足年纪是偶数的打印出来。1、创建spring boot工程,并在pom.xml文件中引入所需要的jar包...原创 2018-04-14 21:16:22 · 4792 阅读 · 0 评论 -
基于xml配置方式整合Spring boot + Spring batch + Quartz
Spring batch提供了强大的批处理功能,比如ItemReader、ItemProcess、ItemWriter,还有Tasklet,但定时功能不够强大;Quartz提供了通过JobDetail、Trigger、SchedulerFactory提供了强大的定时器功能,但批处理功能不够强大,两者一拍即合,Spring做了两者的整合,整合的jar包见: <dependency...原创 2018-04-12 20:23:03 · 3287 阅读 · 4 评论 -
基于编码配置方式整合Spring boot + Spring batch + Quartz
前面一节中已经介绍了基于xml配置方式整合Spring boot + Spring batch + Quartz ,本节介绍基于编码配置方式整合Spring boot + Spring batch + Quartz。具体spring batch和quartz的使用请看其它参考,下面进行整合。 案例:定时,在距当前5s后,每隔3s执行一次job任务,job任务是读取User.txt文件中内容,并把...原创 2018-04-13 21:38:11 · 2709 阅读 · 0 评论 -
整合spring boot + quartz + spring batch + mybatis
quartz负责定时,spring batch负责批量,mybatis负责持久化数据库,具体每个框架的介绍请参考其它文章,本节主要做spring boot + quartz + spring batch + mybatis的整合。案例:指定距当前时间5s后,每隔3s时间执行一次批处理任务,批处理任务是读取数据库表记录并打印出来。 数据库采用DB2数据库,库表为users,记录为: ...原创 2018-04-13 20:13:53 · 10900 阅读 · 2 评论 -
数据写入——写入到xml
spring batch提供了StaxEventItemWriter,用来把数据写入到xml文件中。示例:把下面User.txt文件中的数据写入到xml文件中。ID,NAME,AGE1,lzj,282,tom,203,terry,304,lerry,185,bob,256,linda,277,marry,398,long,229,kin,3310,jiken,40首先读取txt文原创 2018-03-11 12:20:19 · 1114 阅读 · 0 评论 -
数据写入——写入到txt、csv等平面文件
spring batch读取完数据,然后执行process,执行完毕开始写入文件,本章以写入txt、csv等平面文件为例。 Spring batch提供了FlatFileItemWriter类来实现写入文件时的配置。 示例:读取下面User.xml文件,然后把xml中数据写入UserWrite.txt文件中。<?xml version="1.0" encoding="UTF-8"?><root原创 2018-03-10 23:34:51 · 1207 阅读 · 0 评论 -
数据处理——实现数据校验
spring batch提供了对数据校验的功能,先读取数据,然后校验数据,最后写入数据。 在spring batch中实现检验,先定义一个类去实现Validator接口,然后Spring batch提供了一个ValidatingItemProcessor类,用于去执行Validator的接口类。实质ValidatingItemProcessor也是实现了ItemProcessor接口,执行校验就相原创 2018-03-10 21:51:06 · 2705 阅读 · 0 评论 -
Spring batch 之 Hello World
新建一个Spring boot工程,项目管理工具为maven。1、下面新建一个Batch的配置类package com.lzj.spring.batch;import org.springframework.batch.core.Job;import org.springframework.batch.core.Step;import org.springframework.batch.core原创 2018-02-26 11:01:47 · 356 阅读 · 2 评论 -
批处理的执行状态 -> RepeatStatus
每一个job都有一个或多个step,每个step都有执行状态,标识step的批处理是都完成。 在Spring batch框架中已经内置了一个RepeatStatus枚举类,定义了执行step的几个状态。1、FINISHED终止状态 如果一个step执行状态为FINISHED状态,表示该step执行完毕。看下面示例,一个job分两步执行,step1和step2。@Configurat...原创 2018-02-26 15:09:37 · 4470 阅读 · 2 评论 -
作业步骤——step
一个job作业有时可以包括多个step步骤,但每个步骤之间的执行是有顺序的。步骤之间的跳转主要包括如下四种形式。next跳转on() … to()条件跳转from() … on() … to()条件跳转决策者跳转一、next跳转由next()方法指定下一个要跳转执行的step/*@EnableBatchProcessing注解也可以加在spring boot的启动...原创 2018-02-27 19:53:07 · 1209 阅读 · 0 评论 -
读数据——从数据库中批量读取数据
下面以mysql为例,用spring batch批量从mysql数据库表users表中读取数据。 uers表目前数据如下: 下面用spring batch批量读取该表,首先配置数据源#配置step执行多少次commit一次spring.batch.chunk.size=4#数据源配置spring.datasource.url=jdbc:mysql://localhost:33...原创 2018-03-07 22:28:34 · 12219 阅读 · 6 评论 -
读数据——从xml文件中批量读取数据
假设有一个User.xml文件,其内容如下:<?xml version="1.0" encoding="UTF-8"?><root> <user> <id>1</id> <name>lzj</name> <age>28</age> </user> <user> <id>2</id> <name>原创 2018-03-06 22:53:27 · 9107 阅读 · 0 评论 -
读数据——从平面文件(Flat File)中批量读取数据
我们平常见到的txt、csv等都属于平面文件。spring batch中专门定义了一个类用于批量读取文件。 比如在根目录下data目录下有个User.txt文件,数据如下ID,NAME,AGE1,lzj,282,Tom,203,Jerry,184,Bob,255,Ferry,306,Marry,397,Linda,278,Long,229,Kin,3310,Jiken,40第一原创 2018-03-04 22:32:23 · 4776 阅读 · 0 评论 -
数据处理——ItemProcessor接口
spring batch中需要实现ItemProcessor接口来进行批量处理读入的数据。下面以批量把大小字母转化为小写字母为例首先批量读字母,然后进行处理,最后打印出来,整个job作业配置如下import java.util.Arrays;import org.springframework.batch.core.Job;import org.springframework.batch.cor原创 2018-03-08 22:54:36 · 3964 阅读 · 0 评论 -
作业流——flow
不同的job之间有时都需要相同的几个step,并且调用step之间的顺序也是相同的,此时可以把这几个step组成一个flow会方便调用。一个job可以由flow和step共同组成。flow流和flow流或者和tep步骤之间是可以进行跳转的,具体方法同上一章节作业步骤跳转相同,next()、from()、on()、to()同样适用。下面看一下,step、flow和决策者之间的相互跳转首先定义一个决策者原创 2018-03-01 10:16:47 · 1576 阅读 · 0 评论 -
作业流(flow)之间可以串行和并行进行处理
一个作业可以分为若干个流(flow),如果流之间的处理是有先后顺序的,可以顺序的执行每一个流,如果流之间互不影响,可以进行并行处理。一、顺序执行 顺序执行该图中job1中的step和flow的配置程序如下:/*@EnableBatchProcessing注解也可以加在spring boot的启动类上*/@EnableBatchProcessing@Configurationpublic cl原创 2018-03-01 15:53:09 · 4948 阅读 · 4 评论 -
内置job作业
某些情况下,一个job需要嵌套执行另一个job,此时需要借助step。在一个step中嵌套执行一个子job,然后在父job中执行这个嵌套的step即可。如果所示 执行上图作业的程序配置如下:[一]/*@EnableBatchProcessing注解也可以加在spring boot的启动类上*/@EnableBatchProcessing@Configurationpublic class B原创 2018-03-01 21:51:45 · 438 阅读 · 0 评论 -
作业参数获取系统参数
在运行作业时可以获取启动项目工程时设置的启动参数。 例如,在 右击项目 -> Run as -> Run configurations -> Arguments 在propgram arguments中输入: app.name=lzj 设置了app.name参数的值是lzj下面在批处理中获取该参数/*@EnableBatchProcessing注解也可以加在spring boot的启动类上*原创 2018-03-02 09:28:25 · 874 阅读 · 0 评论 -
数据处理——实现数据过滤
实现spring batch中的ItemProcessor接口,并重写接口中的process方法来实现数据过滤。示例:从一个list源中读取数据,只过滤出与”A”差值大于10的数据。1、该作业配置如下:import java.util.Arrays;import org.springframework.batch.core.Job;import org.springframework.batch原创 2018-03-10 17:01:31 · 8196 阅读 · 0 评论 -
Step之间传递数据
Step之间传递数据有两种方式:一、通过step_execution 或者 job_execution来在不同step中传递数据.但是如果数据量大的话,这将不是一种好的方式.因为spring batch默认会通过job repository将 setp_execution和job_execution进行持久化。 如果把要传递的数据放在setp_execution或者job_execution中进行传原创 2018-03-20 16:42:56 · 4273 阅读 · 5 评论