Spring Batch 3.0 Milestone 1 发布
今天,我们很高兴地宣布 Spring Batch 3.0 的第一个里程碑版本发布(下载)。通过此次发布,我们朝着实现 JSR-352 Java Batch 规范迈出了第一步。Spring Batch 是一个轻量级、全面的框架,用于开发健壮的批处理应用程序。
JSR-352
JSR-352 被定位为 Java 平台的批处理标准化。作为该标准化的组成部分,此 JSR 包含了三个主要部分:
- 用于配置作业的基于 XML 的 DSL
- 用于创建作业相关组件(读取器/写入器等)的 API
- 用于支持类和概念的 API 和行为描述
Spring 在为该规范做出贡献方面投入了大量的时间和资源。我们通过 JCP、JSR-352 与其他行业专家的合作,验证了 Spring Batch 在过去五年中在无数生产环境中实施和经受考验的批处理模式是构建关键任务批处理应用程序的最佳方法。
Milestone 1 中的特性
此版本是 Spring Batch 符合 JSR 的第一步。在 JSR-352 TCK 的 155 个 SE 测试中,此版本通过了 70 个。此版本中实现的特定功能包括:
JobOperator实现- 通过 XML 进行基本的作业配置
- batch.xml 支持
JobOperator
JSR 定义了一个 JobOperator 接口,它是 Spring Batch 的 JobOperator 和 JobExplorer 接口的组合。对于规范而言,此接口是批处理应用程序与作业本身(例如启动/停止/重启等)以及作业存储库(提供查询先前运行的 JobExecutions 的能力)进行交互的入口点。因此,JobOperator 需要开箱即用地提供一定级别的服务。JsrJobOperator(javax.batch.operations.JobOperator 的 Spring 实现)会引导一个 Spring 上下文,这类似于 @EnableBatchProcessing。它包含 JobRepository、JobLauncher、JobOperator、JobExplorer、DataSource、TransactionManager、ParametersConverter、JobRegistry 和 PlaceholderPropertiesConfigurer。所有这些都可以通过覆盖启动或重启作业时提供的上下文中的默认 Bean 来在运行时覆盖。默认情况下,JobRepository 使用内存配置的 HSQLDB。
根据 JSR,启动作业实际上非常简单:
JobOperator jobOperator = BatchRuntime.getJobOperator();
JobExecution jobExecution = jobOperator.start("jsrJob", new Properties());
上述两行将引导先前定义的基线上下文(这仅发生一次),然后从 /META-INF 加载 batch.xml 文件(如果存在),并加载 /META-INF/batch-jobs 中 jsrJob.xml 定义的上下文。jsrJob.xml 可以是两种配置之一。它可以是标准的 Spring 上下文配置,将任何批处理工件定义为 Spring Bean,并通过 JSR-352 DSL 定义作业;或者它可以仅仅是 JSR 定义的作业定义。根据 JSR-352,jsrJob.xml 上下文中只能定义一个作业。JsrJobOperator 的其余功能几乎是直接包装现有的 JobOperator 和 JobExplorer 的功能(因此它们包含在基线应用程序上下文中)。
通过 XML 进行基本的作业配置
JSR-352 定义了一个基于 XML 的 DSL,任何 Spring Batch 用户都会立即感到熟悉。它由作业、步骤、读取器和写入器组成,Spring Batch 命名空间中的大部分概念都在 JSR-352 中得到了涵盖。在此版本中,开发人员将能够使用 JSR 定义的 DSL 配置基本作业。基本作业包括以下内容:
<job><step><chunk><batchlet><reader><processor><writer><decision><listeners>/<listener><properties>/<property><skippable-exception-classes>及其子节点<retryable-exception-classes>及其子节点<checkpoint-algorithm><next>/<end>//
使用 JSR,一个批处理作业通过 Spring Batch DSL 看起来是这样的:
<job id="data" xmlns="http://www.springframework.org/schema/batch">
<step id="import" next="report">
<tasklet>
<chunk commit-interval="100"
reader="itemReader"
writer="dataWriter" />
</tasklet>
</step>
<step id="report…
