美文网首页SpringBoot学习
025-SpringBatch批处理

025-SpringBatch批处理

作者: 郭艺宾 | 来源:发表于2018-07-03 19:14 被阅读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

    相关文章

      网友评论

        本文标题:025-SpringBatch批处理

        本文链接:https://www.haomeiwen.com/subject/xfbjuftx.html