12.4 Batch Properties

12.4.1 Property 支持

JSR-352 允许在 Job, Step 和其他 batch 组件级别配置 properties 信息,在 JSL 文件中通过如下的方式配置 Batch properties:

  1. <properties>
  2. <property name="propertyName1" value="propertyValue1"/>
  3. <property name="propertyName2" value="propertyValue2"/>
  4. </properties>

Properties 也可以配置在所有批处理组件中.

12.4.2 @BatchProperty 注解

在批处理组件中 可以通过组件的方式来引用 Properties, 分别是 @BatchProperty@Inject (两个注解需同时要指定). 根据 JSR-352 的定义, propertie 属性域必须是 String 类型. 类型转换取决于代码实现(Any type conversion is up to the implementing developer to perform).

可以像前面所描述的那样定义属性,然后通过类似下面 javax.batch.api.chunk.ItemReader 组件的这种方式来使用:

  1. public class MyItemReader extends AbstractItemReader {
  2. @Inject
  3. @BatchProperty
  4. private String propertyName1;
  5. ...
  6. }

属性域 “propertyName1” 的值会被设置为 “propertyValue1”

12.4.3 Property 替换

Property 替换是由操作符和简单条件表达式实现的. 常用的方式是 #{operator['key']}.

支持以下操作符:

  • jobParameters - 启动/重启 Job 时的参数.
  • jobProperties - JSL中配置在 job 级别的属性.
  • systemProperties - 命名的系统属性.
  • partitionPlan - 在分区 step 中访问分区计划的命名属性.

    {jobParameters[‘unresolving.prop’]}?:#{systemProperties[‘file.separator’]}

左边是希望设置的值,右边是默认值. 在这里, 因为解析不到 #{jobParameters['unresolving.prop']} 的值, 所以生效的会是 system property file.separator. 如果一个都没解析到, 则会返回空字符串(empty String). 可以使用多个条件, 使用英文分号 ‘;‘分隔.