领先一步
VMware 提供培训和认证,以加速您的进步。
了解更多我代表团队和所有贡献者,很高兴地宣布 Spring Batch 5.0.0-M7
现已从我们的 里程碑存储库 中提供。
此里程碑的主要主题是改进 Spring Batch 中作业参数的处理。在此版本中引入了两个主要更改
这篇博文详细介绍了这两个主要更改。有关更改的完整列表,请查看 发行说明。
在 4 版之前,Spring Batch 只支持 4 种可作为作业参数的类型,它们是 long
、double
、String
和 Date
。虽然这对于简化框架侧的作业参数处理很方便,但事实证明它对用户侧来说限制很大。例如,如果有人想使用 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 应用程序属性 的启发,并指定如下
parameterName='{"value": "parameterValue", "type":"parameterType", "identifying": "booleanValue"}'
其中 parameterType
是参数类型的完全限定名称。Spring Batch 提供 JsonJobParametersConverter
来支持此表示法。当然,可以通过实现策略接口 JobParametersConverter
并将自定义实现注册到作业存储库和作业资源管理器中来支持任何其他表示法。
我们认为,Spring Batch 中这两个主要的作业参数处理更改更加方便、灵活且不易出错。
我要感谢所有参与此版本发布的贡献者!随着我们继续在 Spring Batch 5 上开展工作,我们期待您在 Github、Twitter 和 StackOverflow 上提供反馈。