Springbatch框架系列(1-1)Spring batch介绍

2023-10-12 08:08

本文主要是介绍Springbatch框架系列(1-1)Spring batch介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本博文主要从以下几个方面进行介绍:

  • 了解当下批处理框架
  • 介绍下spring batch的主要特点
  • 批处理高效的读写数据
  • 用Spring batch实现一个批处理任务
  • Spring batch任务测试

Spring
batch之所以出现,是因为批处理应用对于写是一种挑战:使得数据的write操作更加容易实现,并且程序处理更加健壮、更加可靠。那么什么是批处理应用呢?批处理任务不在人工介入的情况下处理大规模数据。你可以选择使用批处理程序进行计算生成金融报表、计算统计以及处理索引文件等。将会在后续的文章中介绍大量的批处理应用。你就会了解到对于大规模数据处理的准确、高效、可靠、高性能有多么搞得要求。那么Spring
batch具备实现上述功能的条件,spring batch能够处理多种类型的数据源,包括:数据库、文件。队列等

1.1 什么是批处理应用

常见的批处理应用就是从文件中导入数据然后在另一个系统中处理数据。当你需要在两个系统间交换数据时,先从系统A导入元数据,然后经过一定转换导入系统B。如图:
在这里插入图片描述
批处理任务是自动进行的,所以它必须具备很强的容错能力,不会人为处理异常。批处理要处理的数据量越大,花费的时间越长。由于批量任务可能是在特定的时间段执行,这就必须要保证任务的执行效率。因此,批处理任务有以下几方面的要求:

  • 数据量大:批处理应用必须能够实现大规模数据的导入、导出以及计算;
  • 自动的:排除特殊场景外,批处理要能在非人工干预下自动执行;
  • 鲁棒性:批处理应用必须能够具备处理无效数据的能力,防止过早的崩掉、退出;
  • 可靠性:批处理任务必须对任务的异常进行跟踪、日志记录发生的时间、原因;
  • 高性能:批处理必须是在特定的时间段内完成计算,避免影响其他应用。

Tips:批处理任务如何适应当下的软件结构?
高性能计算与数据转导是批处理应用的典型案例,但是这些类型的应用并没什么关联性。计算型的应用必须在特定的时间内处理大量的数据,并进行大量计算的,使用的较多的是边缘切割算法MapReduce。对于数据转导型的应用,基于消息的解决方案较为流行。有着将批量任务转为准实时的好处。尽管消息是一种很有效的设计模式,但受限于特定的适用场景。很明显,消息的短板在使用的时候需要慎重选择。消息和批处理任务并不是相互独立的解决方式:可以选择用消息交换数据,然后用批处理应用来处理数据,这样也就在应用中保证了应用的安全、可靠。

1.2 认识Spring batch

Spring batch的目标是提供一个开源的批处理框架,以致于能够涵盖大多数应用场景。Spring batch项目是2007年埃森哲咨询公司与SpringSource提出的,埃森哲提供了多年来批处理方面的处理经验,进而出现了现在基于Spring架构的批处理框架Spring batch。下面说下Spring batch的主要特点:

特点描述
基于Spring框架受益于企业的支持,spring的依赖注入、切面编程
基于批处理的在读写数据上有很好的表现
简单易用提供的组件能够支持大多数批处理场景(包括从文件以及数据库中对数据的读写)
鲁棒性、可靠性可以显式定义时间的跳过、重试,失败时允许重启

通过使用Spring batch,就会发现sping框架的诸多优点,并且spring batch提供了很多现成的组件来适应当下比较流行的场景、技术。下表主要描述了spring batch对读写技术的支持:

数据源类型技术组件描述
DatabaseJDBC分页、游标、批量更新
DatabaseHibernate分页、游标
DatabaseJPA(Java Persisitence API)分页
DatabaseiBatis分页
FileFlat file支持划定分隔符的、限定长度的文件
Filexml使用Stax(Streaming API for XML)进行解析;在Sping OXM上进行构建,支持JAXB,XStream和Castor

Tips:Spring batch不是一种执行计划?
Spring batch能够驱动批量任务的执行,但它不会提供一种高级的手段去调用它,而框架使用的调度框架是Quartz和Corn。批量任务的触发通过获取Spring batch的运行时,或者加载特定的JVM进程。有时顺序加载批量任务:如果job a执行成功了再执行job B,如果job A失败了就执行Job C。这种执行计划能够用文件进行配置,spring batch中能够通过配置自己的执行顺序,spring batch的任务是由step组合而成的。

1.2.1 鲁棒性、可靠性

一条错误格式的记录不应该导致job的失败。至少不应该总是这样的,对于错误行的或者错误记录的跳过在Spring batch中是可以显式声明的,配置完成即可。
当重启一项失败的任务时有可能会发生:是否应该从头开始启动,有可能会重复处理数据;是否能够准确的从失败退出的位置重启?Spring batch使得后者的实现变得简单:组件能够跟踪job的运行状态,框架能够提供重启的必要数据。组件能够准确的知道job是从何处退出的,并且能够在正确的位置重启任务。

1.2.2 伸缩策略

Spring batch处理数据是按块进行处理的,在数据的读、写上都是按照一小块实现的。块处理也就使得流数据不会一下都加载到内存,一般来说,块处理是单线程的,性能优异。但是一些特殊场景要求Spring batch任务要处理更快,Spring batch也提供了支持多线程,在多台物理节点上处理的机制。这种伸缩,用到了**分区【partition】**的概念。
分区的划分将一个step分成了多个子step,每个子step都会处理数据的一部分。数据的分区也就要求你要事先了解数据的结构,提前规划数据如何在子步骤上进行拆分。数据的分配可以按照数据库主键的范围进行拆分,也可以按照文件目录进行拆分。子步骤能够本地执行也可以远程执行,Spring batch提供了多线程子步骤。下图示例展示了子步骤是按照文件名进行拆分的:
在这里插入图片描述

Tips:Spring batch与网格计算
当处理PB级别的数据时,一般将任务拆分成小任务按照batch进行处理,并行计算,然后合并结果。一些开源的分布式框架能够处理任务的分发、并行工作,所以开发人员只关注业务逻辑的实现就好。Spring batch与网格计算比较来讲:Spring batch是一个轻量级的解决方案;只要安装了jvm就可以。而网格计算需要一些基础框架,像hadoop等。Spring batch提供了一些扁平文件处理的功能,网格计算通常不会提供高级处理接口。

1.3 介绍下本文的案例

本节介绍一个真实的,在本系列博文中会一直用来讲述Spring batch的例子:在线存储系统。这个例子简单、小巧,但也真实反映出现实场景对批处理技术的需求。不仅能说明Spring batch的特点,还能在企业的角度来更好的整合技术的使用。
通过对例子的实现,会对框架有进一步的认识:Spring batch是如何在批量数据中实现高效的读写操作的,以及如何使用内置的组件,构建自己的组件以及如何配置Spring batch任务

1.3.1 在线存储应用

ACME公司想通过网站销售产品以拓展业务。为此,ACME创建的一个明确的在线交易系统。使用Spring batch任务将交易日志构建到一个数据库当中。应用会处理每晚的数据,在日志中插入新产品并更新已有商品。
在这里插入图片描述

1.3.2 为什么用Spring batch构筑在线存储系统?

为什么ACME会创建一个在线的、基于web的应用来卖产品?这是最好的方式来拓展业务并发展客户?web应用部署方便、容易构建、用户体验佳。ACME决定把他们的应用部署到当地的一个服务提供商的服务器上,而不是用自己的网络。第一版的应用会提供一个简单、方便的UI,而在这之前更关注的应该是日志的事务问题。
之后,考虑下为什么ACME会选择将数据从一个系统转到另一个系统而不是两部分数据之间交互?软件提供了一个API,之所以不用是为了保证安全。如图所示,ACME自己的网络管理登记日志信息,公司不想将这部分数据直接暴露给外网,只能通过一个外部应用来实现。这种防范手段是必须要有的。
在这里插入图片描述
使用这种结构的另一个原因是登记日志系统的API和数据格式不适合在线存储系统。ACME想展示的是一个总结性的产品信息,这里也会牵扯大量请求的调用,因此会对日志系统的系统造成影响。

1.3.3 为什么使用批处理任务?

在线存储的应用是两个系统数据交换场景的很好的例子。ACME按天来更新登记系统、增加新产品、以及更新已有产品。web应用没有必要暴露实时数据,买家可以通过之前的数据来浏览产品数据。
在这里插入图片描述

Tips: 提取、转换、加载【ETL】
简单讲,ETL是数据库与数据仓库创建的一个关键环节,主要分为两步处理:
1 从外部数据源提取数据
2 根据特定的目的对数据进行处理
3 将转换后的数据回写到数据库中
有很多免费的、开源软件能帮助我们完成ETL处理。这里是我们要探讨的一个重要方面。但一般会简单分为三步进行处理。

在上图中ETL处理将创建一个flat文件灌入到在线数据库,从一个外部的数据库系统提取数据并转换成符合在线存储系统使用的文件格式。对于这种目的的处理,ETL就像一个黑盒子,开发人员只需要关注数据的读写操作。

1.3.4 产品信息导入

未完待续…

这篇关于Springbatch框架系列(1-1)Spring batch介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/194481

相关文章

Java方法重载与重写之同名方法的双面魔法(最新整理)

《Java方法重载与重写之同名方法的双面魔法(最新整理)》文章介绍了Java中的方法重载Overloading和方法重写Overriding的区别联系,方法重载是指在同一个类中,允许存在多个方法名相同... 目录Java方法重载与重写:同名方法的双面魔法方法重载(Overloading):同门师兄弟的不同绝

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

Java中ArrayList与顺序表示例详解

《Java中ArrayList与顺序表示例详解》顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构,:本文主要介绍Java中ArrayList与... 目录前言一、Java集合框架核心接口与分类ArrayList二、顺序表数据结构中的顺序表三、常用代码手动

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

Spring Boot Interceptor的原理、配置、顺序控制及与Filter的关键区别对比分析

《SpringBootInterceptor的原理、配置、顺序控制及与Filter的关键区别对比分析》本文主要介绍了SpringBoot中的拦截器(Interceptor)及其与过滤器(Filt... 目录前言一、核心功能二、拦截器的实现2.1 定义自定义拦截器2.2 注册拦截器三、多拦截器的执行顺序四、过

JAVA线程的周期及调度机制详解

《JAVA线程的周期及调度机制详解》Java线程的生命周期包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED,线程调度依赖操作系统,采用抢占... 目录Java线程的生命周期线程状态转换示例代码JAVA线程调度机制优先级设置示例注意事项JAVA线程

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

springboot的controller中如何获取applicatim.yml的配置值

《springboot的controller中如何获取applicatim.yml的配置值》本文介绍了在SpringBoot的Controller中获取application.yml配置值的四种方式,... 目录1. 使用@Value注解(最常用)application.yml 配置Controller 中