遥遥领先
VMware 提供培训和认证,以加速您的进步。
了解更多我很高兴代表团队和所有贡献者宣布 Spring Batch 5.0.0-M7
现在可以从我们的 里程碑存储库 中获得。
此里程碑的主要主题是改进 Spring Batch 中的作业参数处理。 此版本中引入了两个主要更改
这篇博客文章详细介绍了这两个主要变化。 有关更改的完整列表,请查看发行说明。
在 4.x 版本之前,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 Application Properties 的启发,其指定如下
parameterName='{"value": "parameterValue", "type":"parameterType", "identifying": "booleanValue"}'
其中 parameterType
是参数类型的完全限定名称。 Spring Batch 提供了 JsonJobParametersConverter
来支持这种表示法。 当然,可以通过实现策略接口 JobParametersConverter
并在作业存储库和作业浏览器中注册自定义实现来支持任何其他表示法。
我们相信 Spring Batch 中作业参数处理的这两个主要更改更加方便、更灵活且不易出错。
我要感谢所有在此版本中发挥作用的贡献者! 在我们继续进行 Spring Batch 5 的工作时,我们期待您在 Github、Twitter 和 StackOverflow 上的反馈。