しおしお

IntelliJ IDEAのことなんかを書いてます

JSR352-Batch Applicationを試してみた(ジョブにパラメータを指定する)

JSR352-Batch Applicationを試してみた(ジョブの停止-Batchlet) - しおしおの続編。今回は、ジョブにパラーメータを渡す方法を試してみた。

ジョブ起動時にパラメータを指定する方法

以下のコードのように、JobOperator#startの2番めの引数にジョブ起動時のパラメータを指定する。

final Properties jobParams = new Properties();
jobParams.put("param1", "value1");
jobParams.put("param2", "100");

final JobOperator operator = BatchRuntime.getJobOperator();
final long executionId = operator.start(jobId, jobParams);

ジョブパラメータを受け取る

ジョブパラメータは、BatchletやChunk関連の実装クラス、リスナーなどにBatchPropertyとしてインジェクションする。自動的にインジェクションされるわけではないので、ジョブXMLでジョブパラメータをBatchPropertyにセットする設定が必要となる。

ジョブパラメータを使用する実装サンプル

@Dependent
@Named
public class JobParameterSampleBatchlet: AbstractBatchlet() {
  
  @Inject
  @BatchProperty
  var param:String? = null

  override fun process(): String {
    log.info("param: {}", param)
    return "success"
  }

  companion object {
    val log:Logger = LoggerFactory.getLogger(javaClass<JobParameterSampleBatchlet>())
  }

}

ジョブパラメータを設定するジョブXMLのサンプル
ジョブパラメータを設定するには、以下の例のように#{jobParameters['パラメータ名']}というEL式を使用する。
この例では、ジョブ起動時に指定されたパラメータの中で、パラメータ名がjob-paramの値を、paramプロパティに設定する。

<job id="jobParameter" xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0">
  <step id="myStep">
    <batchlet ref="jobParameterSampleBatchlet">
      <properties>
        <property name="param" value="#{jobParameters['job-param']}" />
      </properties>
    </batchlet>
  </step>
</job>

実行すると
こんなパラメータを設定してと

Properties properties = new Properties();
properties.put("job-param", "パラメータ");

ログにジョブパラメータが出力されたので、パラメータがBatchletに設定されているのがわかる。

13:34:13,554 INFO  [siosio.batchlet.JobParameterSampleBatchlet] (Batch Thread - 1) param: パラメータ

おわり