Spring Batch学习(一)介绍

为什么我们需要批处理?

  1. 我们不会总是想要立即得到需要的信息,批处理允许我们在请求处理之前就一个既定的流程开始搜集信息;比如说一个银行对账单,我们可以按月生成,并在用户查询之前开启一个批处理流程进行处理;
  2. 有时候它能让生意做得更好;比如说在线购物时,并不是说你买了一个产品零售商就立即发货,而是四五个小时后,统一发货;
  3. 更好的利用资源;让应该利用的处理能力闲置起来是一个大的浪费,我们可以定制处理让一个机器一个接一个的运行Job可以更好的利用机器的处理能力;

什么是批处理?

  批处理是指在没有与用户进行交互和干扰的情况下进行数据处理,一旦开始,一个批处理流程应该在没有任何干扰的情况下运行至结束;

为什么要使用Spring Batch?

  1. 可维护性,Spring Batch能让你依靠Spring框架所提倡的依赖注入去解耦对象,凭借Spring所提供的测试工具生成健壮的一系列测试单元,这些都让你的维护风险最小化;
  2. 灵活性,使用Spring Batch,你能在系统之间共享代码,如你能使用那些在你的Web应用程序中已经被测试和调试过的服务;
  3. 可扩展性,在一个完全没有事务管理的Batch Job中,你只需要记住一些原则,并通过一些简单的配置就可以让整个批处理流程具有事务回滚和Commit的能力;
  4. 学习曲线低,如果你有过使用Spring的经验,你只需很小的学习曲线就能使用Spring Batch,因为Spring Batch建立在Spring框架的基础之上,它遵循Spring的惯例,像其他基于Spring的应用程序那样,使用Spring的其它特征;
  5. 活跃的社区支持;

Spring Batch的背景及组成

Spring Batch框架是埃森哲和SpringSource合作项目,它利用一个基于标准的方式去实现常见的批处理模式和范例;它实现的特征包括:数据验证、输出格式化、用一种可重用的方式去实现复杂的业务规则、处理大数据集的能力;

Spring Batch由3层组成:

第一层是应用程序层,包括:所有的自定义代码、为建立批处理流程的所有配置、业务逻辑和服务;注意应用程序层并不处于其它两层的上方,而是封装了其它两层(核心层和基础框架层),原因是在应用程序层中绝大多数你所开发的自定义代码都是和核心层一起工作的;

应用程序层绝大部分时候是和下一层(核心层)进行交互,核心层包含了定义“批处理域”的所有部分,核心组件的元素包括Job和Step接口,同时也包括执行Job的所有接口:JobLauncher和JobParameter;

最下面一层是基础框架层,为了做一些处理,你需要从文件、数据库中读写数据,或者应付一个Job失败的情况,这些部分被视作为常见的基础框架,被放置在Framework的基础框架组件里面。

注意:Spring Batch最常见的误解是它是一个scheduler,但在Spring Batch中没有任何一种方式能让一个Job在某个预定的时间或者被某个事件触发时启动,这些都是通过外部的方式来做到

使用Spring Batch来定义Job

Spring Batch包含了很多领域特定的概念,其间就包括Job,一个Job是指由很多Step组成的一个流程,当一个Step失败之后,这个Job可能会重新运行也可能不会重新运行,一个Job的流程也可能基于某个条件来运行;我们可以在一个applicationContext文件中这样来定义一个Job:

<bean id="accountTasklet"
  class="com.thoughtworks.springBatchDemo.AccountTasklet"/>
<job id="accountJob">
  <step id="accountStep">
    <tasklet ref="accountTasklet"/>
  </step>
</job>

Spring Batch Admin Project

Spring Batch提供了很多管理工具,例如启动或停止Spring Batch Job、查看上次Job运行情况的统计信息;Spring Batch将这些功能都包含在一个新的插件里:Spring Batch Admin Project,它提供了一个基于Web的控制中心,让你能对你的批处理流程实施控制,并能监控批处理的性能。

时间: 2024-11-09 02:08:09

Spring Batch学习(一)介绍的相关文章

Spring Batch学习笔记二

此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch的架构 一个Batch Job是指一系列有序的Step的集合,它们作为预定义流程的一部分而被执行: Step代表一个自定义的工作单元,它是Job的主要构件块:每一个Step由三部分组成:ItemReader.ItemProcessor.ItemWriter:这三个部分将执行在每一条被处理的记录上,ItemReader读取每一条记录,然后传递给ItemProcessor处理,最后交给ItemWriter做持久化:It

Spring Batch学习笔记三:JobRepository

此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch Job在运行时有很多元数据,这些元数据一般会被保存在内存或者数据库中,由于Spring Batch在默认配置是使用HSQLDB,也就是说在Job的运行过程中,所有的元数据都被储存在内存中,在Job结束后会随着进程的结束自动消失:在这里我们推荐配置JobRepository去使用MySQL. 在这种情况下,Spring Batch在单次执行或者从一个执行到另外一个执行的时候会使用数据库去维护状态,Job执行的信息包

Spring Batch学习笔记&mdash;&mdash;steps之间共享数据

名词说明: 上下文: 执行: 执行上下文: 案例: 警告:一旦steps共享数据,这些数据就会把这些steps连接起来.努力使steps独立.如果你实在是不能独立他们,才使用下面的技术.你应该把数据共享作为steps不能独立的后备方案. 1 数据共享方式: a step存储共享数据到数据库,receiving step从数据库读取他们 Execution context(执行上下文): 使用Spring  Batch execution context 作为data容器.a step往上下文写数

Spring Batch学习_ItemReaders and ItemWriters

All batch processing can be described in its most simple form as reading in large amounts of data, performing some type of calculation or transformation, and writing the result out. Spring Batch provides three key interfaces to help perform bulk read

Spring Batch学习

今天准备研究下Spring Batch,然后看了一系列资料,如下还是比较好的教程吧. 链接: http://www.cnblogs.com/gulvzhe/archive/2011/12/20/2295090.html 但在进行到 Spring Batch 之 Sample(CSV文件操作)(四) 时,发现了实战中的问题: outputFile.csv死活写不进结果!!! 想来想去,也尝试了n种调试,确定reader和process绝对没问题,那就writer出现问题了. 所以肯定是配置的csv

Spring Batch学习(二)架构

Spring Batch的架构 一个Batch Job是指一系列有序的Step的集合,它们作为预定义流程的一部分而被执行: Step代表一个自定义的工作单元,它是Job的主要构件块:每一个Step由三部分组成:ItemReader.ItemProcessor.ItemWriter:这三个部分将执行在每一条被处理的记录上,ItemReader读取每一条记录,然后传递给ItemProcessor处理,最后交给ItemWriter做持久化:ItemProcessor不是必须的,一个Step可以仅仅包含

Spring Batch学习(三)JobRepository

Spring Batch Job在运行时有很多元数据,这些元数据一般会被保存在内存或者数据库中,由于Spring Batch在默认配置是使用HSQLDB,也就是说在Job的运行过程中,所有的元数据都被储存在内存中,在Job结束后会随着进程的结束自动消失:在这里我们推荐配置JobRepository去使用MySQL. 在这种情况下,Spring Batch在单次执行或者从一个执行到另外一个执行的时候会使用数据库去维护状态,Job执行的信息包括Job实例.传入的参数.执行的结果.每一个Step执行的

Spring batch学习 持久化表结构详解(2)

#接上一篇 这一篇讲一下持久化需要表 batch_job_execution, batch_job_execution_context, batch_job_execution_params, batch_job_execution_seq, batch_job_instance, batch_job_seq, batch_step_execution, batch_step_execution_context, batch_step_execution_seq _seq结尾的三张表,维护bat

Spring Batch 简单应用 (一)(Hello World)

通过前面两篇关于Spring Batch文章的介绍,大家应该已经对Spring Batch有个初步的概念了.这篇文章,将通过一个"Hello World!"实例,和大家一起探讨关于Spring Batch的一些基本配置和实现.使大家从开发的角度对Spring Batch有一个真切的体会. 说明:1,本实例使用的是spring-batch 2.1.8 2,本实例没有像前面讲的那样配置ItemReader.ItemProcessor和ItemWriter,而是之间在Step中调用Taskl