一、SpringBatch是一个批处理的框架,作为一个Spring组件,提供了通过使用Spring的依赖注入来处理批处理的条件。

  什么是批处理呢?

在现代企业应用当中,面对复杂的业务以及海量的数据,除了通过庞杂的人机交互界面进行各种处理外,还有一类工作,不需要人工干预,只需要定期读入大批量数据,然后完成相应业务处理并进行归档。这类工作即为“批处理”。比如近期金融项目中的撮合功能,不需要人工干预,自动对借款人和出借人进行匹配撮合,完成借贷功能。

从上面的描述可以看出,批处理应用有如下几个特点:

    • 数据量大,少则百万,多则上亿的数量级。
    • 不需要人工干预,由系统根据配置自动完成。
    • 与时间相关,如每天执行一次或每月执行一次。

同时,批处理应用又明显分为三个环节:

    • 读数据,数据可能来自文件、数据库或消息队列等
    • 数据处理,如电信支撑系统的计费处理
    • 写数据,将输出结果写入文件、数据库或消息队列等

因此,从系统架构上,应重点考虑批处理应用的事务粒度、日志监控、执行、资源管理(尤其存在并发的情况下)。从系统设计上,应重点考虑数据读写与业务处理的解耦,提高复用性以及可测试性。

  二、SpringBatch的业务场景有:

  • 周期性的提交批处理
  • 把一个任务并行处理
  • 消息驱动应用分级处理
  • 大规模并行批处理
  • 手工或调度使用任务失败之后重新启动
  • 有依赖步骤的顺序执行(使用工作流驱动扩展)
  • 处理时跳过部分记录
  • 成批事务:为小批量的或有的存储过程/脚本的场景使用

  三、SpringBatch的架构图

  SpringBatch使用三层架构,三层分别为应用、核心和基础服务。

  

  细化的体系结构

  

  

  应用层:包含所有的批处理作业,通过Spring框架管理程序员自定义的代码。

  核心层:包含了Batch启动和控制所需要的核心类,如:JobLauncher、Job和step等。

  基础服务层:应用层和核心层建立在基础服务层即基础架构层智商,基础架构层提供共通的读(ItemReader)、写(ItemWriter)和服务(如RetryTemplate:重试模块,可以被应用层和核心层使用)。

  另外我们还需要知道,Spring Batch 是一款批处理应用框架,不是调度框架。它只关注批处理任务相关的问题,如事务、并发、监控、执行等,并不提供相应的调度功能。因此,如果我们希望批处理任务定期执行,可结合 Quartz 等成熟的调度框架实现。

SpringBatch的初步了解的更多相关文章

  1. SpringBatch Sample (一)(Hello World)

    通过前面两篇关于Spring Batch文章的介绍,大家应该已经对Spring Batch有个初步的概念了.这篇文章,将通过一个”Hello World!”实例,和大家一起探讨关于Spring Bat ...

  2. 移动端之Android开发的几种方式的初步体验

    目前越来越多的移动端混合开发方式,下面列举的大多数我都略微的尝试过,就初步的认识写个简单的心得: 开发方式 开发环境 是否需要AndroidSDK 支持跨平台 开发语言&技能 MUI Win+ ...

  3. CSharpGL(29)初步封装Texture和Framebuffer

    +BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...

  4. Android自定义View初步

    经过上一篇的介绍,大家对于自定义View一定有了一定的认识,接下来我们就以实现一个图片下显示文字的自定义View来练习一下.废话不多说,下面进入我们的正题,首先看一下我们的思路,1.我们需要通过在va ...

  5. 初步认识Node 之Node为何物

    很多人即便是在使用了Node之后也不知道它到底是什么,阅读完本文你应该会有一个初步的.具体的概念了.    Node的目标 提供一种简单的构建可伸缩网络程序的方法.那么,什么是可伸缩网络程序呢?可伸缩 ...

  6. [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)

    [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date  周六 10 一月 2015 By 钟谢伟 Category website develop ...

  7. 基于C/S架构的3D对战网络游戏C++框架 _05搭建系统开发环境与Boost智能指针、内存池初步了解

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  8. Azure底层架构的初步分析

    之所以要写这样的一篇博文的目的是对于大多数搞IT的人来说,一般都会对这个topic很感兴趣,因为底层架构直接关乎到一个公有云平台的performance,其实最主要的原因是我们的客户对此也非常感兴趣, ...

  9. CozyRSS开发记录14-RSS源管理初步完工

    CozyRSS开发记录14-RSS源管理初步完工 1.添加源的响应 DialogHost.Show有几个版本的重载,加一个DialogClosingEventHandler参数.我们让添加源对话框的添 ...

随机推荐

  1. PCB编译时出现的错误 ( Duplicate Net Names Wire N000-1 (Inferred)意思就是端口名字没有定义)

    再运行这个错误Duplicate Net Names Wire N000-1 (Inferred)的就没有了, 不过还有其他的 错误,有错误不用怕,关我的博客解决.

  2. ModelForm的使用

    from django.forms import Form,ModelForm,fields,widgets as wd class QueModelForm(ModelForm): class Me ...

  3. 分布式理论——从ACID到CAP再到BASE

    在传统的数据中,有ACID四大原则,在分布式中也有对应的CAP理论和BASE理论,这些都是分布式理论的基础. 更多内容参考:大数据学习之路 ACID ACID分别是Atomicity 原子性.Cons ...

  4. JVM内存管理--分代搜集算法

    对象分类 分代搜集算法是针对对象的不同特性,而使用适合的算法,这里面并没有实际上的新算法产生.与其说分代搜集算法是第四个算法,不如说它是对前三个算法的实际应用. 首先我们来探讨一下对象的不同特性,接下 ...

  5. (转)Java atomic原子类的使用方法和原理(一)

    在讲atomic原子类之前先看一个小例子: public class UseAtomic { public static void main(String[] args) { AtomicIntege ...

  6. su 与 su - 比较

    原文地址:http://blog.chinaunix.net/uid-25557346-id-2889329.html   今天有一同事说在切换用户的时候,找不到该用户下用户命令,后来仔细检查了一下过 ...

  7. python测试开发django-46.xadmin添加action动作

    前言 Action插件在数据列表页面上提供数据选择功能.可以在Action之后专门处理所选数据.批量删除功能作为默认操作提供. action文档 要启用Action,开发人员可以设置Model Opt ...

  8. C# SpinLock实现

    关于SpinLock自旋锁网上已经有很多说明,这里也copy了一部分,我这里主要关注微软的实现,学习人家的实现方式. 如果由于垃圾回收,基于对象的锁对象开销太高,可以使用SpinLock结构..NET ...

  9. ESXI 迁移至KVM (V2V迁移)

    1.1.1 ESXI将虚拟机导出 导出ova模板 将导出的ova模板导入到KVM环境中. 1.1.2 配置KVM环境 详情参考:http://www.cnblogs.com/clsn/p/836625 ...

  10. Seaslog安装和参数配置

    详细文档访问:https://github.com/Neeke/SeasLog/blob/master/README_zh.md 源码安装步骤: 1.先下载Seaslog源码,下载地址:http:// ...