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: パラメータ
おわり