Fuse 6 is no longer supported
As of February 2025, Red Hat Fuse 6 is no longer supported. If you are using Fuse 6, please upgrade to Red Hat build of Apache Camel.第130章 Quartz2
Quartz2 Component リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.12.0 から利用可能
quartz2: コンポーネントは、Quartz スケジューラー 2.x を使用してスケジュールされたメッセージの配信を提供します。各エンドポイントは、異なるタイマー(Quartz 用語、Trigger および JobDetail)を表します。
Maven ユーザーは、このコンポーネントの
pom.xml
に以下の依存関係を追加する必要があります。
注記: Quartz 2.x API は Quartz 1.x と互換性がありません。古い Quartz 1.x をそのまま使用する必要がある場合は、代わりに古い Quartz コンポーネントを使用してください。
Camel on EAP デプロイメント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
このコンポーネントは、Red Hat JBoss Enterprise Application Platform (JBoss EAP) コンテナー上で簡素化されたデプロイメントモデルを提供する Camel on EAP (Wildfly Camel) フレームワークによってサポートされます。このモデルの詳細は、Deploying into a Web Server の Apache Camel on JBoss EAP の章を参照してください。
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
quartz2://timerName?options quartz2://groupName/timerName?options quartz2://groupName/timerName?cron=expression quartz2://timerName?cron=expression
quartz2://timerName?options
quartz2://groupName/timerName?options
quartz2://groupName/timerName?cron=expression
quartz2://timerName?cron=expression
コンポーネントは
CronTrigger
または SimpleTrigger
のいずれかを使用します。cron 式が指定されていない場合、コンポーネントは単純なトリガーを使用します。groupName
が指定されていない場合、quartz コンポーネントは Camel
グループ名を使用します。
URI にクエリーオプションは
?option=value&option=value&.. の形式で追加できます。
オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
パラメーター | デフォルト | 説明 |
---|---|---|
cron
|
なし |
cron 式を指定します( trigger.\* または job.\* オプションと互換性がありません)。
|
trigger.repeatCount
|
0
|
SimpleTrigger: タイマーを繰り返す回数はどれくらいですか ? |
trigger.repeatInterval
|
1000
|
SimpleTrigger: 繰り返されるトリガーの間隔(ミリ秒単位)。この間隔を使用して簡単なトリガーを使用するには、trigger.repeatCount を有効にする必要があります。
|
job.name
|
null
|
ジョブ名を設定します。 |
ジョブ。XXX
|
null
|
ジョブオプションを XXX セッター名で設定します。
|
trigger.XXX
|
null
|
XXX セッター名で trigger オプションを設定します。
|
stateful
|
false
|
デフォルトのジョブの代わりに Quartz @PersistJobDataAfterExecution および @DisallowConcurrentExecution を使用します。
|
fireNow
|
false
|
true の場合、SimpleTrigger の使用時にルートが起動するとトリガーが実行されます。 |
deleteJob
|
true
|
true に設定すると、ルートが停止したときにトリガーが自動的に削除されます。false に設定すると、スケジューラーに残ります。false に設定すると、ユーザーは camel Uri で事前設定されたトリガーを再利用できます。名前が一致するだけです。deleteJob と pauseJob の両方を true に設定することはできないことに注意してください。 |
pauseJob
|
false
|
true に設定すると、ルート停止時にトリガーが自動的に一時停止します。false に設定すると、スケジューラーに残ります。false に設定すると、ユーザーは camel Uri で事前設定されたトリガーを再利用できます。名前が一致するだけです。deleteJob と pauseJob の両方を true に設定することはできないことに注意してください。 |
durableJob
|
false
|
Camel 2.12.4/2.13: 孤立した後にジョブが保存したままになるかどうか(トリガーを参照しない)。
|
recoverableJob
|
false
|
Camel 2.12.4/2.13: 'recovery' または 'fail-over' が発生した場合にジョブを再実行する必要があるかどうかをスケジューラーに指示します。
|
usingFixedCamelContextName
|
false
|
Camel 2.15.0: true の場合、JobDataMap は CamelContext 名を直接使用して Camel コンテキストを参照します。false の場合は、deployed がデプロイ中に変更される可能性のある管理名を使用します。JobDataMap CamelContext
|
customCalendar
|
なし |
Camel 2.17.0: スケジューラーおよびトリガーにカスタムカレンダーを追加して、特定の日付範囲を回避します(例:Holidays)。customCalendar タイプは org.quartz.Calendar です。
|
たとえば、以下のルーティングルールは、
mock:results
エンドポイントに 2 つのタイマーイベントを実行します。
from("quartz2://myGroup/myTimerName?trigger.repeatInterval=2&trigger.repeatCount=1") .routeId("myRoute") .to("mock:result");
from("quartz2://myGroup/myTimerName?trigger.repeatInterval=2&trigger.repeatCount=1")
.routeId("myRoute")
.to("mock:result");
stateful=true
を使用する場合、JobDataMap はジョブが実行されるたびに再永続化されるため、次の実行の状態を維持します。
OSGi での実行と quartz ルートを持つ複数のバンドルがある
Apache ServiceMix や Apache Karaf などの OSGi で を実行し、Quartz2 エンドポイントから開始する Camel ルートを持つ複数のバンドルがある場合は、OSGi コンテナーの
QuartzScheduler
で必要となるため、この ID が一意である <camelContext> に ID を割り当てるようにしてください。
<camelContext> に id
を設定しないと、一意の ID が自動的に割り当てられ、問題はありません。
quartz.properties ファイルの設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Quartz はクラスパスの
org/quartz
ディレクトリーで quartz.properties
ファイルを検索します。WAR デプロイメントを使用している場合は、WEB-INF/classes/org/quartz
の quartz.properties をドロップするだけです。
ただし、Camel Quartz2 コンポーネントでは、プロパティーを設定することもできます。
パラメーター | デフォルト | タイプ | 説明 |
---|---|---|---|
properties
|
null
|
プロパティー
|
java.util.Properties インスタンスを設定できます。
|
propertiesFile
|
null
|
文字列
|
クラスパスから読み込むプロパティーのファイル名 |
これには、Spring XML で以下のように設定します。
<bean id="quartz" class="org.apache.camel.component.quartz2.QuartzComponent"> <property name="propertiesFile" value="com/mycompany/myquartz.properties"/> </bean>
<bean id="quartz" class="org.apache.camel.component.quartz2.QuartzComponent">
<property name="propertiesFile" value="com/mycompany/myquartz.properties"/>
</bean>
JMX での Quartz スケジューラーの有効化 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
JMX を有効にするには、quartz スケジューラープロパティーを設定する必要があります。これは通常、
org.quartz.scheduler.jmx.export
オプションを設定ファイルの true
値に設定します。
Camel 2.13 以降では、明示的に無効にしない限り、Camel はこのオプションを
true
に自動的に設定します。
Quartz スケジューラーの起動 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Quartz2 コンポーネントは、Quartz スケジューラーの遅延、または自動起動を行わないオプションを提供します。
パラメーター | デフォルト | タイプ | 説明 |
---|---|---|---|
startDelayedSeconds
|
0
|
int
|
quartz スケジューラーを起動するまで待機する秒数。 |
autoStartScheduler
|
true
|
boolean
|
スケジューラーを自動起動するかどうか。 |
これには、Spring XML で以下のように設定します。
<bean id="quartz2" class="org.apache.camel.component.quartz2.QuartzComponent"> <property name="startDelayedSeconds" value="5"/> </bean>
<bean id="quartz2" class="org.apache.camel.component.quartz2.QuartzComponent">
<property name="startDelayedSeconds" value="5"/>
</bean>
クラスタリング リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
クラスターモードで Quartz を使用する場合、
JobStore
はクラスター化されます。次に、Quartz2 コンポーネントは、ノードの停止/シャットダウン時にトリガーを一時停止/削除し ません。これにより、トリガーはクラスター内の他のノードでも実行を継続できます。
注記: クラスターノードで実行している場合は、エンドポイントに対して一意のジョブ名/グループを確認するためのチェックが行われません。
メッセージヘッダー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel は Quartz Execution Context からの getter をヘッダー値として追加します。以下のヘッダー
が
追加されます: calendar
、fireTime
、jobDetail
、jobInstance
、jobRuntTime
、mergedJobDataMap
、nextFireTime
、previousFireTime
、refireCount
、Result、scheduledFireTime
、scheduler
、trigger
Name
、triggerGroup
。
fireTime
ヘッダーには、エクスチェンジがいつ実行されたかの java.util.Date
が含まれます。
Cron トリガーの使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Quartz は、便利な形式でタイマーを指定する Cron のような式 をサポートしています。これらの式は
cron
URI パラメーターで使用できますが、有効な URI エンコーディングを保持するには、スペースの代わりに + を使用できます。
たとえば、以下は、毎週 12pm (noon)から 6pm までの 5 分ごとにメッセージを表示します。
from("quartz2://myGroup/myTimerName?cron=0+0/5+12-18+?+*+MON-FRI").to("activemq:Totally.Rocks");
from("quartz2://myGroup/myTimerName?cron=0+0/5+12-18+?+*+MON-FRI").to("activemq:Totally.Rocks");
これは cron 式の使用と同等です。
0 0/5 12-18 ? * MON-FRI
0 0/5 12-18 ? * MON-FRI
以下の表は、有効な URI 構文を保持するために使用する URI 文字エンコーディングを示しています。
URI 文字 | Cron 文字 |
---|---|
\+
|
スペース |
タイムゾーンの指定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Quartz スケジューラーを使用すると、トリガーごとにタイムゾーンを設定できます。たとえば、国のタイムゾーンを使用するには、以下のように実行できます。
quartz2://groupName/timerName?cron=0+0/5+12-18+?+*+MON-FRI&trigger.timeZone=Europe/Stockholm
quartz2://groupName/timerName?cron=0+0/5+12-18+?+*+MON-FRI&trigger.timeZone=Europe/Stockholm
timeZone 値は、
java.util.TimeZone
で許可される値です。
QuartzScheduledPollConsumerScheduler の使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Quartz2 コンポーネントは Polling Consumer スケジューラーを提供します。これにより、File や FTP コンシューマーなどの Polling Consumer に cron ベースのスケジューリングを使用できます。
たとえば、cron ベースの式を使用して 2 秒間隔でファイルをポーリングするには、Camel ルートを以下のように定義できます。
from("file:inbox?scheduler=quartz2&scheduler.cron=0/2+*+*+*+*+?") .to("bean:process");
from("file:inbox?scheduler=quartz2&scheduler.cron=0/2+*+*+*+*+?")
.to("bean:process");
scheduler=quartz2
を定義して、Quartz2 ベースのスケジューラーを使用するように Camel に指示することに注意してください。次に、scheduler.xxx
オプションを使用してスケジューラーを設定します。Quartz2 スケジューラーでは、cron オプションを設定する必要があります。
以下のオプションがサポートされます。
パラメーター | デフォルト | タイプ | 説明 |
---|---|---|---|
quartzScheduler
|
null
|
org.quartz.Scheduler
|
カスタム Quartz スケジューラーを使用するには、以下を行います。設定しない場合は、Quartz2 コンポーネントから共有スケジューラーが使用されます。 |
cron
|
null
|
文字列
|
必須: ポーリングをトリガーするために cron 式を定義します。 |
triggerId
|
null
|
文字列
|
トリガー ID を指定します。指定しない場合は、UUID が生成され、使用されます。クラスター環境では triggerId を指定できず、クラスターの各ノードには一意の instanceId が必要です。 |
triggerGroup
|
QuartzScheduledPollConsumerScheduler
|
文字列
|
トリガーグループを指定します。 |
timeZone
|
デフォルト
|
TimeZone
|
CRON トリガーに使用するタイムゾーン。 |
重要: エンドポイント URI からこれらのオプションを設定することを忘れないでください。には、
scheduler の接頭辞を指定する必要があります。
たとえば、トリガー ID およびグループを設定するには、以下を実行します。
from("file:inbox?scheduler=quartz2&scheduler.cron=0/2+*+*+*+*+?&scheduler.triggerId=myId&scheduler.triggerGroup=myGroup") .to("bean:process");
from("file:inbox?scheduler=quartz2&scheduler.cron=0/2+*+*+*+*+?&scheduler.triggerId=myId&scheduler.triggerGroup=myGroup")
.to("bean:process");
Spring には CRON スケジューラーもあるため、以下を使用することもできます。
from("file:inbox?scheduler=spring&scheduler.cron=0/2+*+*+*+*+?") .to("bean:process");
from("file:inbox?scheduler=spring&scheduler.cron=0/2+*+*+*+*+?")
.to("bean:process");