Spring Batch学习笔记

标签: spring batch 学习 | 发表时间:2013-02-05 20:21 | 作者:程序员Davenkin
出处:http://www.cnblogs.com/

  和传统的批处理(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<String, JobParameter> parameters = new HashMap<String, JobParameter>();

parameters.put("myParameter", new JobParameter("today"));

JobParameters jobParameters = new JobParameters(parameters);

jobLauncher.run(myJob, jobParameters);

  

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

<job id="myJob" xmlns="http://www.springframework.org/schema/batch">

<step id="simpleTaskletStep" next="simplePrintStep">

<tasklet>

<chunk reader="itemReader" writer="itemWriter" commit-interval="2"/>

</tasklet>

</step>

</job>

 

  以上代码配置了一个名为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的例子,可以查看笔者的 Github

本文链接

相关 [spring batch 学习] 推荐:

Spring Batch学习笔记

- - 博客园_首页
  和传统的批处理(Batch Processing)相比,Spring Batch虽然有很大的不同,但是归根结底,都是顺序地执行一些列任务. 你用Spring Batch可以读取一个TXT文件的内容,然后将处理之后的数据放到数据库里,反之亦然.    Spring Batch任务处理的核心组件有Job、Step、Tasklet、JobLuncher和JobRepository等.

spring boot与spring batch、postgres及elasticsearch整合

- - 互联网 - ITeye博客
当系统有大量数据需要从数据库导入elasticsearch时,使用sping batch可以提高导入的效率. 这篇文章使用spring batch将数据从postgres导入elasticsearch. 本文使用spring data jest连接ES(也可以使用spring data elasticsearch连接ES),ES版本为5.5.3.

Spring Data JPA,基础学习笔记.

- - ITeye博客
最好先学习 JPA 方面的知识....在这里使用的是 Hibernate. 也已经使用了一段时间,看什么都不如看官方文档,我这里也只是写个笔记记录一下,如果能帮助到其他人,很开心 .算是个 demoshow 吧.这里也只写了一些我觉得比较有用的地方.其他一些使用知识,请参见官方文档:http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/.

Spring框架学习【基础知识】

- - CSDN博客推荐文章
1.在java开发领域,Spring相对于EJB来说是一种轻量级的,非侵入性的Java开发框架,曾经有两本很畅销的书《Expert one-on-one J2EE Design and Development》和《Expert one-on-one J2EEdevelopment without EJB》是java高手进阶必看的宝典,Spring就是从这两本书的理论发展起来的.

GitHub - allwefantasy/streamingpro: Build Spark Batch/Streaming/MLlib Application by SQL

- -
StreamingPro 中文文档. 应用模式:写json配置文件,StreamingPro启动后执行该文件,可以作为批处理或者流式程序. 服务模式:启动一个StreamingPro Server作为常驻程序,然后通过http接口发送MLSQL脚本进行交互. 我们强烈推荐使用第二种模式,第一种模式现在已经不太更新了,现在迅速迭代的是第二种模式,并且第二种模式可以构建AI平台.

webService学习之cxf与spring的简单整合

- - 企业架构 - ITeye博客
一:先把cxf的jar包导进去,我是直接在官网下载的cxf的包,解压后直接把lib文件夹里的jar一次.    性全部丢进去了,因为在学习,还不知道哪些包要哪些包不要的,所以干脆直接放进去. . . .

spring quartz学习总结: cluster的配置和示例

- - 开源软件 - ITeye博客
    在前面一篇 文章里我们讨论了quartz和spring quartz的基本流程以及配置,这里针对一些quartz应用的场景和配置重点解读一下quartz的cluster配置和应用.     在前面的执行quartz任务的环境里,我们都是在单独的一台机器上执行任务. 这种单点执行的方式存在着一些问题.

Spring MVC 学习笔记 json格式的输入和输出

- - Java - 编程语言 - ITeye博客
Spring mvc处理json需要使用jackson的类库,因此为支持json格式的输入输出需要先修改pom.xml增加jackson包的引用. 先修改之前的helloworld.jsp,增加客户端json格式的数据输入. 根据前面的分析,在spring mvc中解析输入为json格式的数据有两种方式 1:使用@RequestBody来设置输入.

(转)关于Mybatis的Batch模式性能测试及结论

- - jackyrong
近日在公司项目中,使用到spring+mybatis的架构,特对mybatis的batch模式做了相关研究,得出以下结论:.      1.Mybatis内置的ExecutorType有3种,默认的是simple,该模式下它为每个语句的执行创建一个新的预处理语句,单条提交sql;而batch模式重复使用已经预处理的语句,.

hbase的cache与batch的理解_梦想还是要有的,万一实现了呢!-CSDN博客

- -
在默认情况下,如果你需要从hbase中查询数据,在获取结果ResultScanner时,hbase会在你每次调用ResultScanner.next()操作时对返回的每个Row执行一次RPC操作. 即使你使用ResultScanner.next(int nbRows)时也只是在客户端循环调用RsultScanner.next()操作,你可以理解为hbase将执行查询请求以迭代器的模式设计,在执行next()操作时才会真正的执行查询操作,而对每个Row都会执行一次.