Quartzが入門から精通まで詳しく説明する(3)


Quartzスケジューラ
Quartzフレームワークのコアはスケジューラです.スケジューラはQuartzアプリケーションのランタイム環境を管理します.スケジューラは自分ですべての仕事をするのではなく、フレームワーク内の非常に重要な部品に依存します.Quartzはスレッドやスレッド管理だけではありません.スケーラビリティを確保するため、Quartzはマルチスレッドベースのアーキテクチャを採用しています.
起動時に、フレームワークはワークスレッドのセットを初期化し、このスレッドはスケジューラによって所定のジョブを実行するために使用されます.これがQuartzが複数のジョブを同時に実行できる原理です.Quartzは、スレッド環境を管理するために、緩やかに結合されたスレッドプール管理コンポーネントのセットに依存します.この文書では、スレッドプール管理について何度も説明しますが、Quartz内の各オブジェクトは構成可能またはカスタマイズ可能です.だから、例えば、自分のスレッドプール管理施設に挿入したいなら、きっとできると思います.
さぎょう
Quartzの行話で言えば、ジョブはタスクを実行する簡単なJavaクラスです.タスクは任意のJavaコードです.君が実現すればquartz.Jobインタフェースは、重大なエラーが発生した場合にJobExecutionException異常を放出すればよい.
Jobインタフェースには、ここからジョブが実行される唯一のメソッドexecute()が含まれています.ジョブインタフェースとexecute()メソッドが実装されると、Quartzがジョブの実行であると判断すると、ジョブが呼び出されます.Execute()メソッド内は完全にあなたがしなければならないことです.次の例を示します.
・JavaMail(または他のCommons Netのようなメールフレームワーク)でメールを送る
・リモートインタフェースを作成し、EJBに呼び出す方法
・Hibernate Sessionを取得し、リレーショナル・データベース内のデータの問合せと更新
・OSWorkflowを使用してジョブからワークフローを呼び出す
・FTPとファイルの移動
・Antコンストラクションスクリプトを呼び出して所定のコンストラクションを開始する
この可能性は無限であり、正事という無限の可能性がフレームワークの機能をこのように強くしている.Quartzは、異なる粒度を持つ重複可能なスケジューリングテーブルを構築するメカニズムを提供します.そこで、Javaクラスを作成するだけで、このクラスが呼び出されてタスクを実行します.
ジョブ管理とストレージ
ジョブがスケジュールされると、スケジューラはジョブとその実行回数を覚えて追跡する必要があります.ジョブが30分後または30秒ごとに呼び出されている場合は、これは役に立ちません.実際、ジョブ実行には、スケジューリングされたジョブ上でexecute()メソッドを非常に正確かつ即時に呼び出す必要がある.Quartzはジョブストレージ(JobStore)という概念によってジョブストレージと管理を行う.
ゆうこうジョブきおく
Quartzには、2つの基本ジョブストレージタイプがあります.1つ目のタイプは、通常のメモリを使用してスケジューラ情報を永続化するRAM JobStoreと呼ばれます.このジョブ・ストレージ・タイプは、構成、構築、および実行が最も容易です.多くのアプリケーションでは、このジョブストレージは十分です.
しかし、スケジューラ情報はJVMに割り当てられたメモリに格納されているため、アプリケーションが停止すると、すべてのスケジューラ情報が失われる.再起動間にスケジューリング情報を永続化する必要がある場合は、2番目のタイプのジョブストレージが必要になります.
第2のタイプのジョブストレージは、実際には2つの異なる実装を提供するが、2つの実装は一般的にJDBCジョブストレージと呼ばれる.両方のJDBCジョブストレージには、スケジューラ情報を永続化するためにJDBCドライバとバックグラウンド・データベースが必要です.この2つのタイプの違いは、データベース・トランザクションを制御するか、BEA's WebLogicやJbossなどのアプリケーション・サーバに制御を解放するかどうかです.(これはJ 2 EE領域でBeanが管理するトランザクションとコンテナ管理トランザクションの違いと同様)この2つのJDBCジョブストレージは、次のとおりです.
・JobStoreTX:非アプリケーションサーバ環境での使用を制御したい場合
・JobStoreCMT:アプリケーションサーバ環境で作業中、コンテナ制御トランザクションを希望する場合に使用します.
JDBCジョブは、スケジューラがスケジューラ情報を維持する必要があるユーザのために設計されている.
ジョブとトリガ
Quartzデザイナーは、スケジューリングからジョブを分離するための設計選択をしました.Quartzのトリガは、スケジューラジョブがいつトリガーされるかを示すために使用されます.フレームワークにはトリガタイプが用意されていますが、2つの最も一般的なものはSimpleTriggerとCronTriggerです.SimpleTriggerは、簡単な発火スケジュールが必要なように設計されています.
典型的には、所与の時間と繰り返し回数、または2回の火をつける間に待機する秒数で1つのジョブを火をつける必要がある場合は、SimpleTriggerが適しています.一方、複雑なジョブスケジュールがたくさんある場合は、CronTriggerが必要かもしれません.
CronTriggerはCalendar-likeに基づいてスケジューリングされています.土曜日と日曜日を除く毎日午前10時半に宿題を実行する必要がある場合は、CronTriggerを使用します.名前が示すように、CronTriggerはUnixクローン式に基づいています.
一例として、次のQuartzクローン式は、月曜日から金曜日までの毎日午前10時15分にジョブを実行します.

       
        0 15 10 ? * MON-FRI
       

次の式

       
        0 15 10 ? * 6L 2002-2005
       

2002年から2005年までの毎月の最後の金曜日の午前10時15分に宿題を実行します.SimpleTriggerでそんなことをすることはできません.どちらを使ってもいいですが、どちらが適切かはスケジューリングの必要性にかかっています.