博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Batch学习笔记
阅读量:7096 次
发布时间:2019-06-28

本文共 1909 字,大约阅读时间需要 6 分钟。

  和传统的批处理(Batch Processing)相比,Spring Batch虽然有很大的不同,但是归根结底,都是顺序地执行一些列任务。你用Spring Batch可以读取一个TXT文件的内容,然后将处理之后的数据放到数据库里,反之亦然。

 

   

  Spring Batch任务处理的核心组件有Job、Step、Tasklet、JobLuncher和JobRepository等。其中,Job即每次批处理时需要完成的工作,一个Job可以包含多个Step,Step可以顺序执行,也可以通过配置分支性执行。Tasklet为相对独立的一个任务步骤,比如清空数据库、启动Web服务器等。JobLuncher用来运行一个Job,而JobRepository则用于完成Spring Batch本身的数据库访问,我们只需要配置好JobRepository就行了,至于数据库访问操作则又框架自动完成。

   一般的批处理都是通过任务计划工具(Scheduler)来自动启动,比如Linux下的corn。对于Spring Batch,我们可以用Quartz和ControlM等任务计划工具来进行定时启动。

   在用JobLuncher启动一个Job时,我们需要提供JobParameters。JobParameters的作用是一方面可以向Job提供一些参数,一方面可以用来标定Job的唯一性。比如,对于前者,你可以将日期参数传给Job,然后在Job中使用该日期从数据库中查询当天的数据记录;而对于后者,如果先后两次执行同一个Job时传入的参数一样,那么在第二次执行时,Spring Batch会抱怨“已经有一个相同的Job实例存在”,然后终止第二次Job的执行,所以在用JobLuncher执行Job时,我们需要提供不同的JobParameter来保证每次Job执行的唯一性。当然,JobParameters中可以包含多个参数,根据你自己的需要,有些参数可以在前后执行Job时保持一致,但是所有的JobParameters不能够全部相同。下面代码演示了如何执行一个Job:

HashMap
parameters = new HashMap
();parameters.put("myParameter", new JobParameter("today"));JobParameters jobParameters = new JobParameters(parameters);jobLauncher.run(myJob, jobParameters);

  

  对于通常的一些Step,我们都需要先读入一些数据,再写出一些数据。Spring Batch为我们提供了ItemReader和ItemWriter,配置如下:

 

  以上代码配置了一个名为myJob的Job,该Job中包含了一个Step,在该Step的tasklet中配置了一个itemReader和itemWriter。

   ItemReader和ItemWriter均为均为接口,我们需要定义自己的reader和writer来分别实现这两个接口。当然,也可以使用Spring Batch现成提供的,比如JdbcCurcorItemReader。

   一个Tasklet中的ItemReader和ItemWriter协同工作,基本原理是:ItemReader中read方法会被框架循环调用,直到read方法返回null为止。read返回的对象会自动的传给ItemWriter的write方法。ItemReader的read方法返回的一般为一个我们自己定义领域对象,而你会发现ItemWriter的write方法接受的并不是单个对象,而是一个List,这便和以上配置中的commit-interval有关系了。

  举个例子,对已以上配置,commit-interval="2",表示框架首先会执行两次ItemReader的read方法,再将这两次分别返回的对象放到一个List里面,最后将该List传给ItemWriter。然后又重新执行read方法两次,将得到的List传给write方法。这样重复执行,知道read方法返回为null为止。

  关于Spring Batch的例子,可以查看笔者的。

转载地址:http://mzhql.baihongyu.com/

你可能感兴趣的文章
linux学习第八周总结
查看>>
第二次测试题
查看>>
Java 处理异常 9 个最佳实践,你知道几个?
查看>>
Apache 不能列目录解决。
查看>>
如何永久的修改主机名
查看>>
NSSearchPathForDirectoriesInDomains用法(后台缓存)
查看>>
Jqurey 全选和全不选
查看>>
ELK日志收集平台部署
查看>>
软件公司员工辞职、人员流动大是必然
查看>>
勤快的love枫[ZJOI2007]
查看>>
Linux查看系统信息的一些命令及查看已安装软件包的命令
查看>>
poj1417 true liars(并查集 + DP)详解
查看>>
离散数学--二元关系总结
查看>>
HTML5 本地存储 localStorage、sessionStorage 的遍历、存储大小限制处理
查看>>
【leetcode】688. Knight Probability in Chessboard
查看>>
【leetcode】Maximum Product of Word Lengths
查看>>
C 工具库 GLib --- 提供多种高级的数据结构,如内存块、双向和单向链表、哈希表、动态字符串等...
查看>>
SQL中format()函数对应的格式
查看>>
svn command
查看>>
职业插画之路
查看>>