领先一步
VMware 提供培训和认证,助您加速进步。
了解更多我谨代表团队和所有贡献者,很高兴地宣布 Spring Batch 5.0.0-M7 已在我们的 milestone repository 中提供。
此里程碑的主要主题是改进 Spring Batch 中的作业参数处理。此版本引入了两项主要更改:
本博文将详细介绍这两个主要更改。有关完整的更改列表,请查看 release notes。
截至 4.x 版本,Spring Batch 只支持 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 Application Properties 启发,并指定如下:
parameterName='{"value": "parameterValue", "type":"parameterType", "identifying": "booleanValue"}'
其中 parameterType 是参数类型的完全限定名称。Spring Batch 提供了 JsonJobParametersConverter 来支持此表示法。当然,可以通过实现策略接口 JobParametersConverter 并将自定义实现注册到 job repository 和 job explorer 来支持任何其他表示法。
我们相信 Spring Batch 中这两个主要的作业参数处理更改将更加方便、更灵活且不易出错。
我要感谢所有为本次发布做出贡献的人!随着我们继续在 Spring Batch 5 上工作,我们期待您在 Github、Twitter 和 StackOverflow 上的反馈。