「如何实现流动式软件发布」线上课堂开课啦,快来报名参与课堂抽奖吧~ 了解详情
写点什么

Spring Batch 2.0 支持工作划分和基于注解的配置

2009 年 5 月 08 日

最新版本的 Spring Batch 框架支持工作划分(job partitioning)、远程分割(remote chunking)及基于注解的配置。Spring Batch 开发团队最近发布了 batch 框架的 2.0 版。新版本还新增了诸如对 Java 5 的支持及非顺序执行等特性。

这一版本的新特性可以分为四类:对 Java 5 的支持、非顺序执行、增强的可伸缩性以及注解。

对 Java 5 的支持:
Spring Batch 2.0 版支持 Java 5 泛型和参数化类型,以便可以在编译时检查类型安全性。例如, ItemReader 接口现在有了一个类型安全的 read 方法。

非顺序执行:
这其实包括 3 个新特性——条件、暂停和并行执行。凭借这些特性,各步骤可以按非线性顺序执行。即使工作(Job)中的某个步骤(step)失败,整个工作也依然能够完成。有条件执行(Conditional execution)根据最后一个 ExitStatus 把工作划分为不同的分支。这也包括 FAILED 状态下执行分支任务的能力,也就是说一个步骤的失败不再是整个工作的致命错误。暂停执行(Pause execution)可以用来停止或等待外部命令(explicit instruction),这在业务规则需要人工干预以检查业务关键数据是否有效时非常有用。而对于多步骤的并行执行(parallel execution),各步骤间互相独立,用户可以自行指定哪些分支能够并行执行。

可伸缩性:
新版采用两种方法支持多进程的并行执行:远程分割及划分。远程分割是在对数据结构没有任何详尽认知的情况下对一个步骤的特定工作进行划分的一项技术。任何输入源都可以动态分割,只需要通过单一进程读取该输入源,并将其作为一整块发送给远程工作进程即可。远程工作进程实现了 listener 模式,对请求作出响应,处理数据且异步发回应答。请求和应答的传输必须是持久性的、有保证的,且只有单一的消费者,这些特性在所有 JMS 实现中都已具备。Spring Batch 正是在 Spring Integration 基础上构建的远程分割特性,因此它根本不必关心消息中间件的实际实现。

划分是实现可伸缩性的另一种方式,相比之下,它需要知道输入数据的结构,比如主键的范围、或者要处理文件的名字。这种模式的好处是,分区中的每个元素的处理器都可以看作是正常 Spring Batch 工作中的单个步骤。它们不用实现任何特定模式,因而易于配置和测试。划分比远程分割更具伸缩性,这是因为在同一地方读取所有输入数据时不会产生序列化瓶颈。在 Spring Batch 2.0 中,划分由两个接口支持: PartitionHandler StepExecutionSplitter

基于注解的配置:
Spring Batch 组件如 reader、writer、processor、listener,都可以使用注解来配置,也都可以插入到任务的某个步骤中去。这是通过针对 Spring Batch 的 XML命名空间来实现的。

新版本在应用程序监测方面也有一些变化,包括对执行或跳过项目的计数、记账;在每个阶段对所有项目读取、处理和写入的分割计数等方面的统计。对于那些没有把执行划分成读取、处理、写入等各个步骤(或tasklet)的应用来说,这些统计更多的是为了综合了解而绝非必需,但多数情况下,这总比只存储项目总数更可取。

SpringSource 计划在企业级 Batch 产品中提供划分和远程分割、还有管理和调度等方面的完整的运行时解决方案。其未来的路线图还包括为 Spring Batch 2.1 增加 Spring 3.0 依赖(同时保留 2.5.6 为可选)。正是出于这样的计划,新版本中涵盖的特性以工作和步骤的配置居多,尤其是在配置过程中使用了 Spring Expression Language (EL) 的延迟绑定(late binding),该延迟绑定的语法和 Spring Batch 2.0 中的基本相同,只是所提供的特性更多、灵活性更大。

查看英文原文: Spring Batch 2.0 Supports Job Partitioning and Annotation Based Configuration

2009 年 5 月 08 日 16:262154
用户头像

发布了 150 篇内容, 共 37.2 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

一篇文章搞定 java 中的 path 和 classpath

shengjk1

Java classpath vs path classpath path

关于Iterator和Iterable

shengjk1

Java Iterator和Iterable

Scrum vs Kanban,如何选择

TerryLee

Scrum Kanban 敏捷开发 Worktile 研发管理

如果明天没有恐惧——两小时看完余欢水后想到的……

伯薇

个人成长 心理学 小说 恐惧

一文搞定 equals 和 hashCode

shengjk1

Java equals vs hashcode

Arduino 蓝牙遥控+超声避障小车

黄耗子皮

树莓派 极客

破解 Java Agent 探针黑科技!

谭建

Java JVMTI APM Profile

给业务线的总经理多交代了几句

霍太稳@极客邦科技

创业 效率 团队管理

像黑客一样思考

Fooying

黑客思维 黑客 安全攻防

程序员职业鉴赏

陆陆通通

程序员 加班 职业病 鄙视链

死磕Java并发编程(1):探究Java并发机制的底层原理

七哥爱编程

Java Java并发 并发编程

阿里面试,一面就倒在了Java内存模型上?赶紧来看看

七哥爱编程

面试 Java并发 内存模型

你不必读完一本书

池建强

学习 读书

我从来不在朋友圈晒投资人合影,却融了很多钱

邓瑞恒Ryan

高效工作 人脉 职业规划

三点思考,判断一家公司是否值得加入

邓瑞恒Ryan

高效工作 个人成长 职业

回“疫”录:开篇

小天同学

疫情 回忆录 现实纪录 纪实

Fire Fast 再深一层的是什么?

树上

管理 考核 Fire Hire 用人

Idea工程启动时报错:Command line is too long

玏佾

intellij-idea

Windows环境MySql8.0忘记root密码重置

玏佾

MySQL

Flink获取kafka中每条消息对应的topic

shengjk1

flink kafka flink 消费 kafka 获取 topic等信息

极客父母送给孩子的 ABC Book 就是这么 GEEK

魏彬(rockybean)

GEEK BOOK

Java中的Stream用还是不用

孙苏勇

Java 流计算 程序设计 性能

当我们在说5G网络安全的时候,究竟在说什么?

石君

5G 5G网络安全 5G安全 网络安全

机房运维需要了解东西

Spider man

一个值得推荐的人才测量标准

Selina

聊聊:Java

谢烟客

Java 编程 开发者 随笔杂谈 「Java 25周年」

国内10大前端团队网站

有思且行

技术 前端 大前端

2020,这个世界会好吗?

IT民工大叔

读书笔记

公司大了,人多事杂,如何落地项目制?

树上

项目制 落地 公司管理 业务线 考核

复用到何种程度

孙苏勇

Java 程序设计 复用 面向对象 抽象

媒体的经营 01 | 媒体/内容行业投资分析的维度

邓瑞恒Ryan

创业 内容 重新理解创业 媒体 投资

Spring Batch 2.0支持工作划分和基于注解的配置-InfoQ