Spring Batch 5.0.0-M7 现已发布!

版本发布 | Mahmoud Ben Hassine | 2022 年 10 月 05 日 | ...

我谨代表团队和所有贡献者,很高兴地宣布 Spring Batch 5.0.0-M7 已在我们的 milestone repository 中提供。

此里程碑的主要主题是改进 Spring Batch 中的作业参数处理。此版本引入了两项主要更改:

  • 添加支持使用任何类型作为作业参数
  • 改进作业参数转换

本博文将详细介绍这两个主要更改。有关完整的更改列表,请查看 release notes

添加支持使用任何类型作为作业参数

截至 4.x 版本,Spring Batch 只支持 longdoubleStringDate 四种类型作为作业参数。虽然这简化了框架端的作业参数处理,但却限制了用户的使用。例如,如果想使用 boolean 或自定义类型作为作业参数怎么办?这需要额外转换为 Spring Batch 支持的类型之一,这很快就给用户带来了不便。

在此版本中,我们添加了支持使用任何类型作为作业参数。此改进背后的主要更改如下:

---public class JobParameter implements Serializable {
+++public class JobParameter<T> implements Serializable {

---   private Object parameter;
+++   private T value;

---   private ParameterType parameterType;
+++   private Class<T> type;

}

此更改会影响作业参数在数据库中的持久化方式。请查看 迁移指南了解数据库架构更改。参数类型的完全限定名称现在将作为 String 持久化,参数值也是如此。字符串文字将使用标准的 Spring 转换服务转换为参数类型。标准的转换服务可以通过任何必需的转换器进行增强,以将用户特定类型与字符串文字进行相互转换。

改进作业参数转换

v4 中作业参数的默认表示法如下所示:

[+|-]parameterName(parameterType)=parameterValue

其中 parameterType[string,long,double,date] 之一。虽然这种表示法简洁,但它显示出一些限制,因为它与环境变量不兼容,并且对 Spring Boot 不友好。

在 v5 中,我们已将默认表示法更改为:

parameterName=parameterValue,parameterType,identificationFlag

其中 parameterType 是参数类型的完全限定名称。例如,以下键/值对:

schedule.date=2022-12-12,java.time.LocalDate

将被转换为类型为 java.time.LocalDate,值为 2022-12-12 的标识性作业参数。请注意,标识标志是可选的,默认为 true。这种新的默认表示法非常适合大多数用例,但当值包含逗号时可能不方便。因此,我们引入了一种新的“扩展”表示法,该表示法受 Spring Boot 的 Json Application Properties 启发,并指定如下:

parameterName='{"value": "parameterValue", "type":"parameterType", "identifying": "booleanValue"}'

其中 parameterType 是参数类型的完全限定名称。Spring Batch 提供了 JsonJobParametersConverter 来支持此表示法。当然,可以通过实现策略接口 JobParametersConverter 并将自定义实现注册到 job repository 和 job explorer 来支持任何其他表示法。

我们相信 Spring Batch 中这两个主要的作业参数处理更改将更加方便、更灵活且不易出错。

反馈

我要感谢所有为本次发布做出贡献的人!随着我们继续在 Spring Batch 5 上工作,我们期待您在 GithubTwitterStackOverflow 上的反馈。


Spring Batch 主页|Github 源代码|参考文档

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看所有