快手、孩子王、华为等专家分享大模型在电商运营、母婴消费、翻译等行业场景的实际应用 了解详情
写点什么

Java EE 7,Spring 标准化的 Batch

  • 2013-07-01
  • 本文字数:2068 字

    阅读完需:约 7 分钟

上月发布的 Java EE 7 平台包含了批处理编程模型的规范,它很大程度上由 VMware 的 Spring Batch 项目派生而来。上月 Spring Batch 也被广泛提及,因为它发布了一个值得关注的释放版本,这个版本带来了更为简洁的配置和最新的数据访问方式。

Java 平台上的批处理应用程序,也就是 JSR-352,为应用开发人员提供了一个开发健壮批处理系统的模型。这个编程模型的核心是借鉴于 Spring Batch 的开发模式,也就是它创造的 Reader-Processor-Writer 模式,在这个模式中鼓励开发人员遵循面向数据块的处理标准。

_Reader-Processor-Writer_ 模式可拆分为三个工作流程步骤,要求开发人员去遵循:

  • ItemReader_ 类被设计用来消费要处理数据的一个 _ 数据块(通常是一条记录);
  • ItemProcessor,业务和领域逻辑会基于 _ 数据块 _ 对其进行处理;
  • 最后,记录将会在处理后委托给 _ItemWriter_,然后进行聚集。

按照 JSR 规范,Job_ 要通过 XML 文档进行描述并且包含了处理流程中的 _Steps。每个 _Step_ 负责描述每个 _ 数据块 _ 将要进行怎样的处理以及提交要基于什么样的间隔进行注册。对于流程中某个更为复杂的 _Step_ 处理需求可以通过 JSR-352 的 _batchlet_ 来进行处理。JSR-352 中的 _batchlet_ 对应于 Spring Batch 的 _tasklet_,它提供了处理一个 _Step_ 的策略。

JSR-352 也借用了 Spring Batch 的模式来访问和控制任务。任务要通过 _JobOperator_ 来触发,而任务的结果要通过 _JobRepository_ 进行访问。在 Spring Batch 中,_JobRepository_ 的名字是相同的,而 JobOperator_ 被称之为 _JobLauncher

与 Spring Batch 定义任务的方式稍有差别,Java EE7 的应用开发人员需要将任务的 XML 文档放到工程的 META-INF/batch-jobs 目录之中。在 Spring Batch 中,开发人员可以将它们的任务配置放在 Spring 应用上下文的任何地方,只要在容器中能够访问到就可以。

Java EE 7 容器的任务 XML 要定义具体的 _Reader_、_Processor_ 以及 _Writer_ 类,除此之外,还有缓冲区的大小、提交的间隔以及检查点策略。检查点策略用于描述提交是如何进行处理的。默认值是“item”,但是开发人员也可以选择将“time”作为提交策略。在前一种场景中,提交间隔描述的是处理过的记录数,而后者描述的是秒数。

复制代码
<job id="myJob" xmlns="http://batch.jsr352/jsl">
<step id="myStep" >
<chunk
reader="MyItemReader"
writer="MyItemWriter"
processor="MyItemProcessor"
buffer-size="5"
checkpoint-policy="item"
commit-interval="10" />
</step>
</job>

Spring Batch 的任务描述与 Java EE7 基本上是相同的,需要说明的是步骤的定义要包含在 _tasklet_ 指令之中。chunk 配置中的 reader、process 以及 writer 属性引用了应用上下文中已有的 Bean。在 2.2.0 版本中,chunk 配置中的 commit-interval 描述了在进行一次提交之前必须要处理的记录数。

复制代码
<job id="myJob">
<step name="myStep">
<tasklet>
<chunk
reader="myItemReader"
processor="myItemProcessor"
writer="myItemWriter"
commit-interval="2" />
</tasklet>
</step>
</job>
<bean id="myItemReader" class="...MyItemReader" />
<bean id="myItemProcessor" class="...MyItemProcessor" />
<bean id="myItemWriter" class="...MyItemWriter" />

尽管目前的目标是要与 JSR-352 兼容,但是 Spring Batch 超出规范的一点在于,它为开发人员提供了一种与 Spring 生态系统中其他组件进行无缝集成的方式。在批处理的场景下,Spring Data 可以直接作为 _Reader-Processor-Writer_ 模式中的 _Reader_,从而允许开发人员从 Spring Data Repository 之中查询数据块。同样是在上月发布的 Spring Batch 2.2.0 版本中,为使用 Spring Data 的 MongoDB 和 Neo4j 数据存储,提供了改进后的接口。

除了简化 Reader 接口,最新的 Spring Batch 释放版本为 Spring Java 配置提供了扩展支持,从而可以简化批处理特性。为了启用这个简化的配置,开发人员需要为带有 @Configuration 注解的类再添加 @EnableBatchProcessing 注解。通过这种方式,像 JobRepository 和 JobLauncher 这样的批处理特性就能够直接进行装配,而无需额外的配置。

复制代码
@Configuration
@EnableBatchProcessing
public class AppConfig {
@Autowired
private JobBuilderFactory jobs;
@Bean
public Job job() {
return jobs.get("myJob").start(step1()).next(step2()).build();
}
@Bean
protected Step step1() {
...
}
@Bean
protected Step step2() {
...
}
}

Spring Batch 2.2.0 除了增强数据获取和配置以外,这个最新的释放版本也将对 Spring 框架的版本依赖升级到了 3.1.2。要使用最新版本 Spring Batch 的 Spring 开发人员在开发批处理应用的时候,需要满足这个最小版本要求。

原文英文链接: Java EE 7, Spring Standardize Batch

2013-07-01 10:596176

评论

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

「趣学前端」提到布局,我第一个会想到的是flex

叶一一

CSS 前端 10月月更

【愚公系列】2022年10月 Go教学课程 030-结构体继承

愚公搬代码

10月月更

Smart Finance:熊市下,GameFi P2E热潮仍能得到延续

股市老人

架构师的十八般武艺:架构治理

agnostic

架构治理

如何使用 CSS 提高页面性能?

CoderBin

CSS 面试 前端 优化 10月月更

元宇宙早已注定毁灭?《雪崩》中预言的末日病毒

脑极体

雪崩

微信朋友圈高性能复杂度分析

兜里贼缺钱

可能的二分法

掘金安东尼

算法 10月月更

【LeetCode】用栈操作构建数组Java题解

Albert

算法 LeetCode 10月月更

如何在 SAP BTP Java 应用里使用 SAP HANA 数据库

汪子熙

云原生 Cloud SAP 10月月更 btp

大数据ELK(二十七):数据可视化(Visualize)

Lansonli

10月月更 Visualize

「CSS畅想」当我拥有了一个小夜灯,我的CSS副属性被激活了

叶一一

CSS JavaScript 前端 10月月更

什么时候用Goroutine?什么时候用Channel?

王中阳Go

Go 并发 channel goroutine 10月月更

架构师的十八般武艺:后记

agnostic

架构师

打造安全的Open RAN

俞凡

架构 安全 OpenRAN

致MonoCats社群的一封信:邀请您与我们在以太坊开启新篇章

股市老人

Java基础(七)| 类、对象、封装和构造详解

timerring

Java 对象 封装 构造 10月月更

架构实战训练营模块2-朋友圈复杂度分析

阿姆斯壮

#架构实战营 架构实战训练营9期

Goroutine是什么?进程、线程、协程又是什么?有什么区别和联系?

王中阳Go

Go 线程 进程 协程 10月月更

「趣学前端」开耍CSS的3D转换,不会玩滑板但能画滑板

叶一一

CSS 前端 10月月更

【ArchSummit】通过ArchSummit 全球架构师峰会对企业数字化转型的思考

小明Java问道之路

云原生 企业数字化转型 全球架构师峰会 ArchSummit 10月月更

TSDB在高速公路大数据平台的应用

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

Go RPC入门指南:RPC的使用边界在哪里?如何实现跨语言调用?

王中阳Go

php Go RPC RPC框架 10月月更

新书上市|豆瓣8.6,首部全面披露中国游戏发展史的奇书!

图灵社区

Spring Boot「07」Loading initial data 02

Samson

Java spring Spring Boot 学习笔记 10月月更

PriorityQueue 源码解析(二)

知识浅谈

Priority Queue 10月月更

「CSS畅想」有一天,我遇到了一个奇特的路灯,眼里一下子有了光

叶一一

CSS JavaScript 前端 10月月更

「趣学前端」玩转CSS的2D转换,也许能有个代码纸片人

叶一一

CSS 前端 10月月更

python程序能打包吗?看这篇就知道了

芥末拌个饭吧

python 3.5+ pyinstaller 10月月更

新书上市|豆瓣8.6,首部全面披露中国游戏发展史的奇书!

图灵教育

游戏

Java EE 7,Spring标准化的Batch_Java_Dan Woods_InfoQ精选文章