第159章 SpringBatch
Spring Batch コンポーネント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
spring-batch: コンポーネントとサポートクラスは、Camel と Spring Batch インフラストラクチャー間の統合ブリッジを提供します。
Maven ユーザーは、このコンポーネントの
pom.xml に以下の依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-batch</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
spring-batch:jobName[?options]
jobName は、Camel レジストリーにある Spring Batch ジョブの名前を表します。
警告
このコンポーネントはプロデューサーエンドポイントの定義にのみ使用できます。つまり、
from () ステートメントで Spring Batch コンポーネントを使用することはできません。
オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
| 名前 | デフォルト値 | 説明 |
|---|---|---|
jobLauncherRef
|
null
|
非推奨で、Camel 3.0!Camel 2.10:代わりに jobLauncher=#theName を使用してください。 |
jobLauncher
|
null
|
Camel 2.11.1: Camel レジストリーから使用する JobLauncher を明示的に指定します。
|
使用方法 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Spring Batch コンポーネントがメッセージを受信すると、ジョブ実行がトリガーされます。ジョブは、以下のアルゴリズムに従って解決された
org.springframework.batch.core.launch.JobLaucher インスタンスを使用して実行されます。
JobLauncherがコンポーネントに手動で設定されている場合は、これを使用します。jobLauncherRefオプションがコンポーネントに設定されている場合、Camel Registry で指定の名前でJobLauncherを検索します。非推奨で、Camel 3.0 で削除されます。- jobLauncher 名で Camel レジストリーに登録されている
JobLauncherがある場合は、これを使用します。 - 上記の手順で JobLauncher を解決できず、Camel レジストリーに
インスタンスが 1 つだけある場合は、これを使用します。JobLauncher
メッセージで見つかったすべてのヘッダーは、ジョブパラメーターとして
JobLauncher に渡されます。文字列、Long、Double、および java.util.Date の値は org.springframework.batch.core.JobParametersBuilder にコピーされます。他のデータ型は String に変換されます。
例 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Spring Batch ジョブ実行をトリガーします。
from("direct:startBatch").to("spring-batch:myJob");
JobLauncher セットで Spring Batch ジョブの実行を明示的にトリガーします。
from("direct:startBatch").to("spring-batch:myJob?jobLauncherRef=myJobLauncher");
JobLauncher によって返される Camel 2.11.1JobExecution インスタンス以降、SpringBatchProducer によって出力メッセージに転送されます。JobExecution インスタンスを使用して、Spring Batch API を直接使用して一部の操作を実行できます。
from("direct:startBatch").to("spring-batch:myJob").to("mock:JobExecutions");
...
MockEndpoint mockEndpoint = ...;
JobExecution jobExecution = mockEndpoint.getExchanges().get(0).getIn().getBody(JobExecution.class);
BatchStatus currentJobStatus = jobExecution.getStatus();
サポートクラス リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Component とは別に、Camel Spring Batch は Spring Batch インフラストラクチャーへのフックに使用できるサポートクラスも提供します。
CamelItemReader リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
CamelItemReader を使用すると、Camel インフラストラクチャーから直接バッチデータを読み取ることができます。
たとえば、以下のスニペットは、JMS キューからデータを読み取るように Spring Batch を設定します。
<bean id="camelReader" class="org.apache.camel.component.spring.batch.support.CamelItemReader">
<constructor-arg ref="consumerTemplate"/>
<constructor-arg value="jms:dataQueue"/>
</bean>
<batch:job id="myJob">
<batch:step id="step">
<batch:tasklet>
<batch:chunk reader="camelReader" writer="someWriter" commit-interval="100"/>
</batch:tasklet>
</batch:step>
</batch:job>
CamelItemWriter リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
CamelItemWriter は CamelItemReader と同様に目的がありますが、処理されたデータのチャンクの書き込み専用です。
たとえば、以下のスニペットは、データを JMS キューに書き込むように Spring Batch を設定します。
<bean id="camelwriter" class="org.apache.camel.component.spring.batch.support.CamelItemWriter">
<constructor-arg ref="producerTemplate"/>
<constructor-arg value="jms:dataQueue"/>
</bean>
<batch:job id="myJob">
<batch:step id="step">
<batch:tasklet>
<batch:chunk reader="someReader" writer="camelwriter" commit-interval="100"/>
</batch:tasklet>
</batch:step>
</batch:job>
CamelItemProcessor リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
CamelItemProcessor は Spring Batch org.springframework.batch.item.ItemProcessor インターフェイスの実装です。後者の実装は Request Reply パターン をリレーし、バッチ項目の処理を Camel インフラストラクチャーに委譲します。処理する項目は、メッセージのボディーとして Camel エンドポイントに送信されます。
たとえば、以下のスニペットは、Direct エンドポイント と Simple 式言語 を使用してバッチアイテムの簡単な処理を実行します。
<camel:camelContext>
<camel:route>
<camel:from uri="direct:processor"/>
<camel:setExchangePattern pattern="InOut"/>
<camel:setBody>
<camel:simple>Processed ${body}</camel:simple>
</camel:setBody>
</camel:route>
</camel:camelContext>
<bean id="camelProcessor" class="org.apache.camel.component.spring.batch.support.CamelItemProcessor">
<constructor-arg ref="producerTemplate"/>
<constructor-arg value="direct:processor"/>
</bean>
<batch:job id="myJob">
<batch:step id="step">
<batch:tasklet>
<batch:chunk reader="someReader" writer="someWriter" processor="camelProcessor" commit-interval="100"/>
</batch:tasklet>
</batch:step>
</batch:job>
CamelJobExecutionListener リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
CamelJobExecutionListener は、ジョブ実行イベントを Camel エンドポイントに送信する org.springframework.batch.core.JobExecutionListener インターフェイスの実装です。
Spring Batch によって生成された
org.springframework.batch.core.JobExecution インスタンスは、メッセージのボディーとして送信されます。before- と after-callbacks SPRING_BATCH_JOB_EVENT_TYPE ヘッダーを区別するには、BEFORE または AFTER 値に設定されます。
以下のスニペット例は、Spring Batch ジョブ実行イベントを JMS キューに送信します。
<bean id="camelJobExecutionListener" class="org.apache.camel.component.spring.batch.support.CamelJobExecutionListener">
<constructor-arg ref="producerTemplate"/>
<constructor-arg value="jms:batchEventsBus"/>
</bean>
<batch:job id="myJob">
<batch:step id="step">
<batch:tasklet>
<batch:chunk reader="someReader" writer="someWriter" commit-interval="100"/>
</batch:tasklet>
</batch:step>
<batch:listeners>
<batch:listener ref="camelJobExecutionListener"/>
</batch:listeners>
</batch:job>