跑批利器--SpringBatch框架
Spring Batch的框架包括启动批处理作业的组件和存储Job执行产生的元数据。如果你作为一个批处理应用程序的开发人员,你暂时没有必要跟这些组件打交道,因为它们主要为我们提供组件支持的角色,但是您需要配置这个基础框架在你的批处理应用程序中。
启动Jobs并存储Job元数据.
Spring Batch框架本身还是比较复杂的,但是我们开始接触它的时候主要是处理两个组件:Job Launcher和Job Repository.这两个概念对应着的java接口分别是:JobLauncher和 JobRepository.
JobLauncher
对于Spring Batch这个框架里的小世界而言.JobLauncher是连接它跟外面世界的一个入口,具体SpringBatch如何跟外界进行交互,文章结尾会进行简单的说明.相对而言JobLauncher接口还是比较简单的,如下:
packageorg.springframework.batch.core.launch;
(...)
publicinterface JobLauncher {
publicJobExecution run(Job job, JobParameters jobParameters)
throwsJobExecutionAlreadyRunningException,
JobRestartException,JobInstanceAlreadyCompleteException,
JobParametersInvalidException;
}
JobLauncher接口接受两个参数:Job和JobParameters.那么谁来调用这个Job Launcher呢?当然,我们首先可以通过java程序来通过JobLauncher来启动,也可以通过定时任务例如Quartz scheduler来启动.
JobRepository
JobRepository保持着所有Job执行的相关元数据,JobRepository的java接口如下:
packageorg.springframework.batch.core.repository;
(...)
publicinterface JobRepository {
booleanisJobInstanceExists(String jobName, JobParameters jobParameters);
JobExecutioncreateJobExecution(
StringjobName, JobParameters jobParameters)
throwsJobExecutionAlreadyRunningException, JobRestartException,
JobInstanceAlreadyCompleteException;
voidupdate(JobExecution jobExecution);
voidadd(StepExecution stepExecution);
voidupdate(StepExecution stepExecution);
voidupdateExecutionContext(StepExecution stepExecution);
voidupdateExecutionContext(JobExecution jobExecution);
StepExecutiongetLastStepExecution(JobInstance jobInstance,
StringstepName);
intgetStepExecutionCount(JobInstance jobInstance, String stepName);
JobExecutiongetLastJobExecution(String jobName,
JobParametersjobParameters);
}
JobResponseitory 接口提供所有的服务来管理批量任务的生命周期,包括创建,更新等等.一般而言job启动器会把job的创建任务委托给Job Repository来做,同时job也会在它执行的过程中来让Job Repository存储它当然的状态.
下面我们来看看Spring Batch 是如何跟外部系统进行交互的,先看一下下图.
一个批量应用程序并不是一个孤岛,它也需要跟外面的世界比如一些企业项目进行交互,上图基本上涵盖了它的交互内容.
一个job的启动通常是一个事件来进行触发的,我们会经常用到JobLauncher接口和JobParameters类,但是这个事件是可以来自任何地方的,例如一个系统的定时器;一个http请求到web控制器来启动job等这就是Spring Batch 和外界的介入点.
另外批量Job程序基本上都是用来处理各种数据的,所以上图中我们可以看到SpringBatch的出口都是在跟数据源进行打交道,这些数据源可以是任何类型,但是文件系统和数据库是最常用的,当然它也可以支持写消息给JMS.
到目前为止我们已经了解SpringBatch的核心组件以及他们如何跟外部世界进行交互.
跑批利器--SpringBatch框架相关推荐
- 跑批利器--读取文件
在上篇文章中已经对示例的基本业务和流程进行了解,同时也知道了SpringBatch的三个接口ItemReader,ItemProcessor,ItemWriter.接下来我们主要是通过示例来具体处理一 ...
- 微服务设计指导-使用云原生微服务解决传统海量跑批时引起的系统间“级联雪崩”以及效率
问题描述 这也是一起真实的生产事故,如下图所示 这种"雪崩"是属于企业内部系统雪崩. 我们都知道如果是在外部http (包括一切restful.soap请求.http类型调用)调用 ...
- 金融任务实例实时、离线跑批,Apache DolphinScheduler 在新网银行的三大应用场景与五大优化...
在新网银行,每天都有大量的任务实例产生,其中实时任务占据多数.为了更好地处理任务实例,新网银行在综合考虑之后,选择使用 Apache DolphinScheduler 来完成这项挑战.如今,新网银行多 ...
- 查询慢 跑批慢 性能低怎么办? | 润乾高性能计算专家
完整资料下载: 查询慢.跑批慢.性能低怎么办?| 润乾高性能计算专家
- elasticJob分片跑批
2019独角兽企业重金招聘Python工程师标准>>> 业务迅速发展带来了跑批数据量的急剧增加.单机处理跑批数据已不能满足需要,另考虑到企业处理数据的扩展能力,多机跑批势在必行.多机 ...
- tidb 企业_TiDB 在马上消费金融核心账务系统归档及跑批业务下的实践
作者介绍: 康文权,马上消费金融总账高级研发工程师. 李银龙,原腾讯云运维工程师,马上消费金融容器云 TiDB 负责人,西南区 TUG Leader. 背景介绍 马上消费金融于 2015 年 6 月营 ...
- java跑批任务_【spring配置】——spring整合Quartz定时器
第一种:为普通java类中的某个方法配置跑批任务MethodInvokingJobDetailFactoryBean CronTriggerBean SchedulerFactoryBean 1.定义 ...
- 【中亦安图】清算/报表/日终跑批程序之性能优化案例(5)
第一章 技术人生系列 · 我和数据中心的故事(第五期)-清算/报表/日终跑批程序之性能优化案例(一) 中亦安图 | 2016-02-18 21:40 前言 不知不觉,技术人生系列·我和数据中心的故事来 ...
- 视频教程-Web前端开发利器 SPRY框架之表单验证-JavaScript
Web前端开发利器 SPRY框架之表单验证 有17年互联网行业从业经验,始终在教学第一线,勇于创新,从有效教学,不断向高效教学转变.始终坚持"学生为主体,教师为主导:商业化案例,企业化情境& ...
最新文章
- CSP 201909-2	小明种苹果(续)Python实现+详解
- [USACO1.3]混合牛奶 Mixing Milk
- html标记什么规定applet,HTML applet 标签
- java循坏_Java的坏功能是什么
- python实例方法、静态方法和类方法
- you need to resolve your current index first 解决办法
- Algs4-1.2.8引用型变量赋值-数组复制
- 2022考研计算机-数据库原理教程1-7章
- 小米官网服务器维修无法刷机,小米手机无法刷机的解决方法
- as模拟器配置编译的Android,android studio连接雷电模拟器 【AS 模拟器】
- mysql多进程模块型_mysql mysqld_multi 单机多进程
- 如何进行容器镜像加速?| 深度揭示阿里云 Serverless Kubernetes(3)
- [白话解析] 深入浅出极大似然估计 极大后验概率估计
- Revit二开之管道翻弯
- Java+阿里云手机验证码发送和验证
- Oracle数据库(三)可插拔数据库使用
- 《JS学习》Object对象
- python-正负数交叉排序
- iOS开发之 简易随机点名册的设计
- YTU 3086 紧急补习!
热门文章
- 【若泽大数据001】Linux基础知识汇总
- java基础巩固-宇宙第一AiYWM:为了维持生计,Spring全家桶_Part1-1(Spring左膀右臂中的左膀IOC第一篇~全是概念,Spring为啥辣么6)~整起
- 计算机PAD网络是什么,iPad平板电脑的WLAN与Cellular版有什么区别【详细介绍】
- 少壮不努力 老大徒伤悲
- STM32内部flash详解(1)
- IDEA + github pull request + teamcity运用
- 快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置
- 2020年中国化学发光行业发展现状、竞争格局及未来发展趋势分析,市场规模爆发式增长,成为体外诊断中的“主力军”「图」
- 为什么PHP项目运行报错502,Nginx + php-fpm 出现502错误分析
- 用C语言实现读心术程序设计,无聊的时候写的读心术小程序