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
网友评论