石英ジョブスケジューリング(4)JobListener点詳細版Hyperanalytic

JobListener

私たちのjobListenerその実装クラスは以下のメソッドを実装する必要があります。

方法 説明
getName() getName()メソッドは、JobListenerを説明するための文字列名を返します。グローバル登録リスナーのために、のgetName()は主にJobDetailリスナー名に登録され、ジョブ固有で参照JobListenerため、ロギングのために使用される値は、リスナーからのgetName()メソッドを返さ一致しなければなりません。
jobToBeExecuted() JobDetailを実行するとき、スケジューラは、このメソッドを呼び出します。
jobExecutionVetoed() スケジューラはJobDetailで実行されようとしているが、それがTriggerListener拒否された場合、このメソッドが呼び出されます。
jobWasExecuted() スケジューラが実行されJobDetail後にこのメソッドを呼び出します。

その後、我々はクォーツスケジューリング(1)概念の急速な進化の記事では、たとえば、私たちのリスナーメソッドを分析し、Paのジャーナリズムの使命を時限と最もホットなニュースのタスクを取得します。

1.カスタムリスナーインタフェースクラス

パブリック クラス MyJobListener 実装JobListener { 

    @Override //は、名前の私たちのリスナーに対応し
    、公共の文字列のgetName(){
         リターン "myJobListener" ; 
    } 

    @Override 
    公共 無効jobToBeExecuted(JobExecutionContextコンテキスト){ 
        System.out.printlnは(のgetName() + 「トリガー」+ context.getJobDetail()getJobClass() +「 いくつかのリソースの仕事はあなたが準備またはログのタスクを完了することができリスニングの実行を開始する前に。」); 
    } 

    @Override // 「拒否権JobDetail」でそれぞれの能力リスナー聞くときTriigerが提供されている
    公共 のボイドjobExecutionVetoed(JobExecutionContextコンテキスト){ 
        System.out.printlnはを("拒否実行、ロギングを行うことができる。" ); 
    } 

    @Override 
    公共 ボイドjobWasExecuted(JobExecutionContextコンテキスト、
            JobExecutionException jobException){ 
        System.out.printlnは(のgetName() + "トリガ" + context.getJobDetail()。 getJobClass()+「終わり、あなたには、いくつかの統計的な仕事や結果を行うことができます資源の破壊がニュースを焼きました実行される作業を監視」); 

    } 

}

2.スケジューラでリスナーを登録します

1がグローバルリスナーとして登録されている2つの方法が、ありますが、他には、特定のローカルJobDetailのリスナーとして登録され、すべてのJobDetailに有効です。異なるバージョンのために、異なる構成があります

1.準備

テストでは、我々は、実装クラスのために働くために使用されます

パブリック クラス PickNewsJobは実装仕事{ 

    @Override 
    公共 ボイドは(JobExecutionContext JEC)を実行スローJobExecutionException { 
        のSimpleDateFormat自衛隊 = 新しいてSimpleDateFormatを( "HH:MM:SS" ); 
        System.out.println( "在" + sdf.format(新しい日付())+ "扒取新闻" ); 
    } 
} 

パブリック クラス GetHottestJobが実装{ジョブ

    @Override 
    公共 ボイドは(JobExecutionContext JEC)を実行スロー JobExecutionExceptionを{
        のSimpleDateFormat SDFを = 新しい新しいてSimpleDateFormat(「HH:MM:SS」); 
        System.out.printlnは( + sdf.format「中」(新新日())+「は読んで記事やコメント額の量に応じて、当社の最も熱いを生成します記事リスト" ); 
    } 

}

2. 1.xのバージョンの設定

1. +バージョンでは、我々は次のコードで仕事を監視することができます

/ ** ********部分的に配置されたリスナー*************************************** * / 
JobListener myJobListener = 新新MyJobListener(); 
pickNewsJob.addJobListener( "myJobListener"); // 名前とここmyJobListener名前のgetName()メソッドとして 
scheduler.addJobListener(myJobListener); // スケジューラに私たちのリスナーに登録
/ ** グローバルリスナー構成*********** ******* * / 
JobListener myJobListener = 新しい新しいmyJobListener(); 
scheduler.addGlobalJobListener(myJobListener); // グローバルリスナーとして直接添加

ここに私たちの完全なテストコードは次のとおりです。

パブリック 静的 ボイドメイン(文字列引数[])スローSchedulerException { 
    JobDetail pickNewsJob = 新しい JobDetail( "JOB1"、 "jgroup1"、PickNewsJob。クラス)。
    JobDetail getHottestJob =  JobDetail( "JOB2"、 "jgroup2"、GetHottestJob。クラス); 
    SimpleTrigger pickNewsTrigger = 新しい SimpleTrigger( "TRIGGER1"、 "GROUP1"、1,2000 )。
    SimpleTrigger getHottestTrigger = 新しい SimpleTrigger( "トリガ2"、 "グループ2"、1,3000 )。
StdSchedulerFactory(); 
    スケジューラスケジューラ = schedulerFactory.getScheduler(); 

    / ** ********部分的に配置されたリスナー*************************************** * / 
    JobListener myJobListener = 新しい新しいMyJobListener(); 
    pickNewsJob.addJobListener ( "myJobListener"); // としてここに名前の名前とmyJobListenerのgetName()メソッド 
    scheduler.addJobListener(myJobListener); //は、スケジューラに私たちのリスナーに登録
    / ** *******グローバルリスナー設定*********** * / 
//       JobListener myJobListener新しい新myJobListener =();
 //       scheduler.addGlobalJobListener(myJobListener); //は、グローバルリスナーとして直接追加

    scheduler.scheduleJob(pickNewsJob、pickNewsTrigger)。
    scheduler.scheduleJob(getHottestJob、getHottestTrigger)。

    scheduler.start(); 

}

今プログラム、コンソール印刷を実行するローカル・リスナー構成の使用は、次のとおりです。

myJobListenerトリガー・モニターを使用すると、ロギングタスクの前にいくつかの準備作業やリソース行うことができますクラスtool.job.PickNewsJob、上で作業を開始した
11時18分31秒でのPaジャーナリズムを
読書の量に基づいて、11時18分31秒との記事で私たちの最も熱い記事のリストを生成するために、コメントの量--------ここから我々は2つの作品を見ることができる非同期である
myJobListenerは資源が可能に行わ作品を、監視クラスtool.job.PickNewsJobの終了をトリガ統計的な作業の結果取るために、いくつかのニュースチョップを破壊またはやって
myJobListenerトリガモニターはあなたが前にログを記録するタスクにいくつかの準備作業やリソースを行うことができますクラスtool.job.PickNewsJob、上で作業を開始した
11時18分33秒でジャーナリスティック選びます
作業が行われ、モニタtool.job.PickNewsJobクラスの最後の引き金myJobListener、あなたには、いくつかの統計的な仕事や結果を行うことができます資源の破壊は、ニュースを焼きました
生成するために、11時18分34秒で私たちの最高の読書記事やコメント額の量に基づいて、記事のホットリスト
、我々は慎重に見て、我々は2つの作業3回を実行しているが、私たちはとしていることがわかります トリガー、repeatCountには2に設定されている場合。これは私達のタスクスケジューラがによって特徴付けられることを示している:主はとても実行3の合計(1 + repeatCountに)回、2回繰り返し、1回行いました。

我々はコメントローカルコードを聞く場合は、グローバルな監視を有効にするには、コンソールのプリントが表示されます。

myJobListenerトリガー・モニターは、リソースがタスクの前に、いくつかの準備作業を行うか、レコードを記録することができますクラスtool.job.PickNewsJob、上で作業を開始した
myJobListenerトリガー・モニターを使用して、タスクを完了することができますクラスtool.job.GetHottestJob、上で作業を開始する前にログインするいくつかの準備作業やリソース
11時25分41秒でのPaジャーナリズムを
記事やコメントの量を読んだの量に基づいて記事の私達の最も熱いリストを生成するために、11時25分41秒には、
クラスtool.job.GetHottestJobの実装の最後の引き金myJobListener結果は統計グリルされたリソース・破壊を作ることができる仕事を、監視したり、いくつかのニュースをやって
myJobListenerトリガはリソースが破壊作ったり結果をグリルしたいくつかの統計情報を行うことができ、実装のクラスtool.job.PickNewsJobエンドの作業を監視仕事
myJobListenerトリガー・モニターは、リソースがタスクの前に、いくつかの準備作業を行うか、レコードを記録することができますクラスtool.job.PickNewsJob、上の作業を開始
午前11時25分43秒Paのジャーナリスティックに
myJobListenerトリガークラスtool.job.PickNewsJobの実装の終わりをモニターの仕事はここに資金を供給することができます ソースニュース破壊や統計的な作業の結果取るために、いくつかのチョップを行う
myJobListenerトリガモニターはリソースがタスクの前に、いくつかの準備作業を行うことができますクラスtool.job.GetHottestJob、上の作業を開始したか記録されたログ
の物品11時25分44秒に従ってを読書とコメント額の金額は、当社の最もホットな記事のリストを生成します
実行される作業を監視tool.job.GetHottestJobクラスの最後の引き金myJobListener、あなたには、いくつかの統計的な仕事や結果を行うことができます資源の破壊はグリルされたニュース
、我々は2つのタスクはのために聞いているされています

3. 2.xバージョンの設定

2. +バージョンでは、** org.quartz.ListenerManagerとorg.quartz.Matcher導入
たちのリスナーのためのよりきめ細かな構成管理のために**

1. ListenerManager

私たちは、ListenerManagerによってスケジューラに私たちのリスナーを追加します。一般的な方法のためにJobDetailは:
1公共ボイドaddJobListener(JobListener JobListener)が
グローバルリスナーを追加し、リスナーはなりJobDetail即ち全てこのリスナー
2公共ボイドaddJobListener(JobListener jobListener、マッチャーマッチャー)が
一致するリスナーの条件を加えマッチャーで私たちの整合条件を宣言
3.ます。public void addJobListener(JobListener jobListener、マッチャー...マッチャ)
不確実なパラメータで来たリスナーと一緒に時間を過ごすの条件に追加する
4.公共ブールremoveJobListener(文字列名)
名によって除去JobListener
5.公共の一覧をgetJobListeners()は
、すべてのモニターを取得します
6. JobListener getJobListener(文字列名)は、パブリック
名前でリスナーを取得します。

2.マッチ

別のリスナーが異なるタスクをリッスンするように私たちは、マッチャ。これは次のように1によって、クラス、最初のものの多くを達成しています:

1。 KeyMatcher<JobKey>

JobKey JobKey一致JobDetailは、それぞれのJobName内に格納され、ユニークなJobGroup JobDetailを見つけるために、対応しています。これは、一般的に使用される方法があります:

    / ** **********構成マッチャー方法*********** * / 
    KeyMatcher <JobKey> keyMatcher = KeyMatcher.keyEquals(pickNewsJob.getKey()); // 構成マッチング中keyMatcher pickNewsJobのJobKey。

    / ** *******使用*********** * / 
    scheduler.getListenerManager()addJobListener(myJobListener、keyMatcher);. // pickNewsJobの文を完了するために私たちのリスナーによって、唯一のリッスン
2. GroupMatcher

グループ名情報が一致して、それが一般的に使用される方法は、以下のとおりです。

    GroupMatcher <JobKey> groupMatcher = GroupMatcher.jobGroupContains( "名前GROUP1"); //は、特定の文字列含有 
            GroupMatcher.groupEndsWith( "oup1を"); // 文字列の特定の端に 
            GroupMatcher.groupEquals( "jgroup1"); // 特に正確な文字列 
            GroupMatcher.groupStartsWith(「jgou」); // 特定の文字列で始まります
3. AndMatcher

以下のように2つの整合の交点をとる、一例です。

KeyMatcher <JobKey> keyMatcher = KeyMatcher.keyEquals(pickNewsJob.getKey()); 
GroupMatcher <JobKey> groupMatcher = GroupMatcher.jobGroupContains( "という名前のグループ1" ); 
AndMatcher <JobKey> andMatcher = AndMatcher.and(keyMatcher、groupMatcher); // 同時に二つのパラメータが満たす一致
4. OrMatcher

そして、整合は、次のような例は、2セットを取ります。

OrMatcher <JobKey> orMatcher = OrMatcher.or(keyMatcher、groupMatcher); //はできいずれかを満足します
5. EverythingMatcher

2つのコンストラクタを持つローカルグローバルマッチング、:

EverythingMatcher.allJobs(); // すべてJobListenerマッチング 
EverythingMatcher.allTriggersを(); // すべてのマッチングのためにTriggerListener

ここに私たちの完全なテストシーケンスは次のとおりです。

パブリック 静的 ボイドメイン(文字列引数[])スローSchedulerException {
     最終 JobDetail pickNewsJob = JobBuilder.newJob(PickNewsJob。クラス
            .withIdentity( "JOB1"、 "jgroup1" ).buildは(); 
    JobDetail getHottestJob = JobBuilder.newJob(GetHottestJob。クラス
            .withIdentity( "JOB2"、 "jgroup2" ).build(); 
    SimpleTrigger pickNewsTrigger = TriggerBuilder 
            .newTrigger()
            .withIdentity( "TRIGGER1"、 "tgroup1"
            .withSchedule(SimpleScheduleBuilder.repeatSecondlyForTotalCount( 2、1 ))startNow()。
            .build(); 
    SimpleTrigger getHottestTrigger = TriggerBuilder 
            .newTrigger()
            .withIdentity( "トリガ2"、 "tgroup2" 
            .withSchedule(SimpleScheduleBuilder.repeatSecondlyForTotalCount( 2、2 ))startNow()。
            .build(); 
    スケジューラスケジューラ = 新しいStdSchedulerFactory()getScheduler(); 
    JobListener myJobListener = 新しいMyJobListener(); 
    KeyMatcher <JobKey> keyMatcher =KeyMatcher.keyEquals(pickNewsJob.getKey())。
    scheduler.getListenerManager()addJobListener(myJobListener、keyMatcher)。
    scheduler.scheduleJob(pickNewsJob、pickNewsTrigger)。
    scheduler.scheduleJob(getHottestJob、getHottestTrigger)。
    scheduler.start(); 
}

プログラムを実行し、我々は以下の印刷された情報を取得します:

myJobListenerトリガー・モニターは、リソースがタスクの前に、いくつかの準備作業を行うか、レコードを記録することができますクラスtool.job.PickNewsJob、上で作業を開始した
記事のリストの量に読み取り、コメントの量に基づいて、当社の最もホットな記事を生成するために
12:48では: 58 Paのジャーナリズム
myJobListenerトリガー資源が破壊をしたか、統計的な作業の結果取るために、いくつかのニュースチョップを行うことができ、実装のクラスtool.job.PickNewsJobエンドの作業を監視
myJobListenerのトリガー・モニターは、クラスtool.job.PickNewsJob上で作業を開始しましたタスクレコードを完了できる場所いくつかの準備作業リソースまたは前にログインし、
12時48分59秒Paのジャーナリスティックに
myJobListenerトリガはリソースが破壊作っやニュースを取るために、いくつかのチョップを行うことができ、実装のクラスtool.job.PickNewsJobエンドの作業を監視します統計作業の結果は、
記事やコメントの量を読んだの量に基づいて記事の私達の最も熱いリストを生成するために
、明らかに、myJobListenerは唯一の私たちのPickNewsJobは一致します。
会場とテストコード上の他の構成を説明するための詳細な構成例を有しているこのシリーズの前の記事を参照することができます

おすすめ

転載: www.cnblogs.com/deityjian/p/11680784.html