批处理框架

什么是批处理?

在现代企业应用当中,面对复杂的业务以及海量的数据,除了通过庞杂的人机交互界面进行各种处理外,还有一类工作,不需要人工干预,只需要定期读入大批量数据,然后完成相应业务处理并进行归档。这类工作即为“批处理”

为什么使用Spring Batch

Spring Batch 作为 Spring 的子项目,是一款基于 Spring 的企业批处理框架。通过它可以构建出健壮的企业批处理应用。Spring Batch 不仅提供了统一的读写接口、丰富的任务处理方式、灵活的事务管理及并发处理,同时还支持日志、监控、任务重启与跳过等特性,大大简化了批处理应用开发,将开发人员从复杂的任务配置管理过程中解放出来,使他们可以更多地去关注核心的业务处理过程。

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

Spring Batch的整体架构

分三层:应用层,核心层,基础设施层。应用层包括所有的batch任务和用户开发的代码。核心层包括在运行期运行一个任务所需要的类,例如:JobLauncher,Job和Step的实现。应用和核心层都在基础设施层之上,基础设施层包括通用的读写器(readers and writers)以及如RetryTemplate等服务。

Spring Batch 结构

Spring Batch 流程

Step执行过程

应用场景

  • 定期提交批处理任务
  • 并发批处理:并行执行任务
  • 分阶段,企业消息驱动处理
  • 高并发批处理任务
  • 失败后手动或定时重启
  • 按顺序处理任务依赖(使用工作流驱动的批处理插件)
  • 局部处理:跳过记录(例如在回滚时)
  • 完整的批处理事务:因为可能有小数据量的批处理或存在存储过程/脚本

后续计划:

对现有数据量使用多线程的方式处理,根据业务量扩展,可以配置成多进程加多线程方式处理。对于海量数据,使用集群,短期内应该不会达到。

备注

官网:https://projects.spring.io/spring-batch/

相关介绍:http://blog.jobbole.com/109857/

https://www.ibm.com/developerworks/cn/java/j-lo-springbatch1/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

RAC一个节点自动重启问题分析

题记:在RAC数据库的故障当中,节点重启的现象很常见,在这种问题的处理当中,有一定的规律性。为了更好的说明这个问题的处理过程,保证出现该类问题的时候,能够有序的...

3685
来自专栏IT大咖说

基于Spring Cloud及K8S构建微服务应用

摘要 广发证券蔡波斯先生通过三个大方向来为我们分享基于Spring Cloud及K8S构建微服务应用。 ? 基于Spring Cloud构建微服务 Netfli...

1K8
来自专栏编程一生

《两地书》--Kubernetes(K8s)基础知识(docker容器技术)

  大家都知道历史上有段佳话叫“司马相如和卓文君”。“皑如山上雪,皎若云间月”。卓文君这么美,却也抵不过多情女儿薄情郎。

2244
来自专栏精讲JAVA

基于Nginx负载均衡方案

转自 架构文摘 项目背景 公司一直使用商用负载均衡(LB),基于以下几点原因考虑用开源产品来替代: 价格昂贵,HTTPS支持并发数太低 技术门槛比较高,学习...

3479
来自专栏Guangdong Qi

根据友盟统计错误分析查找线上BUG(工具篇)

今天线上的版本出现了BUG,在启动APP的时候出现闪退情况,但是这种BUG在正常测试的时候没有测试到,怎么解决呢

6251
来自专栏芋道源码1024

浅谈高性能数据库集群 —— 读写分离

最近学习了阿里资深技术专家李运华的架构设计关于读写分离的教程,颇有收获,总结一下。

1265
来自专栏FreeBuf

老式后门之美:五种复古远程控制工具

目前,高级的rootkit技术可以帮助你在渗透中拿到一个shell后进行持久性控制。此外,还有供应商故意提供了一些植入后门,但那就是截然不同的故事了。尽管各式花...

2519
来自专栏CSDN技术头条

解锁Spring Data Redis的正确使用姿势

Redis 是一个开源的使用 ANSIC 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从2010年...

3937
来自专栏冷冷

jfinal-swagger让你的应用接口更加简单

前言 前两天逛jfinal社区,看到jfinal-swagger项目,接触到swagger,研究了一番对部分代码进行修改,成功整合到LMS,支持jfinal 多...

2739
来自专栏微信终端开发团队的专栏

Hello Bonjour!

Hello Bonjour! 一开始用Bonjour,我是拒绝的。 让我们以一个问题开头:如何能在本地网络找到自己想要的硬件设备及相应服务,并连接? 在这个以I...

25910

扫码关注云+社区

领取腾讯云代金券