SpringBoot学习

025-SpringBatch批处理

2018-07-03  本文已影响27人  郭艺宾

Spring Batch 是一个轻量级的、完善的批处理框架,旨在帮助企业建立健壮、高效的批处理应用。Spring Batch是Spring的一个子项目,使用Java语言并基于Spring框架为基础开发,使的已经使用 Spring 框架的开发者或者企业更容易访问和利用企业服务。

SpringBatch的主要组成部分:

Job: 我们要实际执行的任务,包含一个或者多个Step

Step: 执行步骤,包含ItemReader,ItemProcessor,和ItemWriter

JobRepository: 用来注册Job的容器

JobLauncher: 用来启动Job的接口

ItemReader: 用来读取数据的接口

ItemProcessor: 用来处理数据的接口

ItemWriter: 用来输出数据的接口

下面演示一个使用批处理的方式将csv中的数据插入数据库。

数据表为 SYS_USER,其中有两个字段,ID和NAME。

csv文件如图:

将文件放到resources目录下,文件内容如下:

上面数据库表和文件数据都已经准备好了。

新建项目,添加web,batch,mysql,jpa等几个需要的组件:

可以看到,生成的项目中,依赖如下:

接下来建立用户表的实体类:

接下来建立处理数据类:

接下来建立数据校验类:

增加job的监听类:

最后配置批处理的配置类:

类内容有些多,下面一一讲解。

首先重要的是,配置类要有 @Configuration 注解,然后还需要注解  @EnableBatchProcessing  开启批处理支持。

然后是ItemReader 的定义:

然后是ItemProcessor的定义:

然后是ItemWriter的定义:

接下来是JobRepository定义:

接下来是JobLauncher定义:

然后是Job的定义:

最后定义Step:

代码写完了,可以执行了。首先为了防止id重复,先清除用户表的所有数据。

然后启动项目,可以看到控制台如下输出:

项目启动成功,结果输出正确,再看下数据库:

可以看到,和文件内的数据一致,并且每个用户名都是原来的两倍。说明批处理成功。

上面这种情况是启动后自动执行的方式,很多时候,批处理需要人为去触发。

首先,注释掉批处理配置类的 @Configuration 注解。

然后新建一个配置类TriggerBatchConfig,内容与CsvBatchConfig一模一样。

然后修改TriggerBatchConfig 的 ItemReader:

注意Bean的类型改了,变成了FlatFileItemReader。

最后,新建一个调用的控制器接口,内容如下:

最后,配置Job不在启动的时候自动执行:

spring.batch.job.enabled=false

然后清空数据库表,重新启动。

启动后,在浏览器访问:  http://localhost:8025/imp?fileName=user  , 注意user是文件名。

可以看到执行结果:

spring boot 自动和手动的批处理操作可以批量处理,十分方便。

最后,可以将文件的数据量增加到一万或者十万条,然后进行批处理,发现四五十秒可以导入完:

代码地址: https://gitee.com/blueses/spring-boot-demo

上一篇下一篇

猜你喜欢

热点阅读