春のブートエントリ(IX):統合クォーツ定期タスク春のブートエントリ(VIII):クォーツを使用してRabbitMQのメッセージキューの基本的な統合を取得(バージョン2.3.0)

フィルム物品は、続けて「:ブート(VIII)を取得春はRabbitMQのメッセージキューを統合クォーツ定期的なタスクには、」「を参照してくださいクォーツ(2.3.0バージョン)の基本的な使用入門します

春ブーツは、定期的なタスクを達成するため、統合された石英に加えて、注釈スケジューラを直接使用することができます。それは、より複雑な統合クォーツである理由の簡単な注釈を使用することで、行うことができますか?ここでは、私は単に私がこのようにクォーツプロジェクトを選ぶ理由である道の下でこれらの2、の違いに答え。

1.scheduler注釈モードタイマータスク異常たら、その後、タイマータスクは、タイミングタスクが無効になっていることを意味し、再起動しません、とQuartzはしません。

2.scheduler注釈モード、定期的なタスクがスケジューラ注釈モードはシングルスレッドであることを示し、マルチスレッド及び石英、同じタイミングタスクを同時に処理することができ、再び開くことができないときに完了していない正規のタスクの現在の顔。

3.scheduler注釈モード、まれ形式のタイミング、コメントだけで簡単な設定、多くの複雑なタイミングタスクを完了できませんでした、とQuartzのフォーマットは非常に豊かな、あなたは、時限さまざまなタスクを設定することができます。

これらの理由から、タイミングタスクはクォーツを選択する必要があります。

 

1.依存度を高め

1 <! -石英- >
 2          <依存性>
 3              <のgroupId> org.quartzスケジューラ</ groupIdを>
 4              <たartifactId>石英</たartifactId>
 5              <バージョン> 2.2.1 </バージョン>
 6          </依存>
 7          <! -该依赖必加、里面有SPING对スケジュール的支持- >
 8          <依存性>
 9              <のgroupId> org.springframework </ groupIdを>
 10              <たartifactId>ばねコンテキストサポート</たartifactId>
 11          </依存関係>

2.増加confに

1  パッケージ2  
3。 インポート org.quartz *。;
 4。 インポートorg.springframework.beans.factory.annotation.Autowired;
 5。 インポートorg.springframework.stereotype.Service;
 6。 
7。 
8。 / ** 
9。 * @program: 
 10  * @description :タイミングタスクの作成ジョブ、タスクスケジューラを注入することによって動作する
 11。 * @author :DZ
 12は * @Create:2019年10月19日18時28分
 13である * * / 
14  @Service
 15  パブリック クラスQuartzConf {
 16      プライベート 静的 ファイナルJOB_GROUP =文字列"job_group" ;
 17      プライベート 静的 最終 = "trigger_group"文字列TRIGGER_GROUP ;
 18である     @Autowired
 19。     プライベートスケジューラスケジューラ、
 20は 
21である     / ** 
22れる      *は、スケジュールされたタスクを作成して
 23       *タスク定義(JobDetial)とトリガを対応する(トリガ)、および実行スケジュール(スケジューラ)に添加し、リスナーが議題を開始します。
24       * @param jobDetailName
 25       * @paramのcronExpression
 26である      * @param JOBCLASS
 27       * @throws SchedulerException
 28      * / 
29      公共 ボイド createScheduleJob(文字列jobDetailName、ストリングcronExpression、クラス<?延び JOBCLASS仕事>)スローSchedulerException {
 30          JobDetail jobDetail = JobBuilder.newJob(JOBCLASS)
 31                  .withIdentity( "task_" + jobDetailName、JOB_GROUP).storeDurablyを() .requestRecovery()の構築();
32          CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression)。
33          。トリガトリガ= TriggerBuilder.newTrigger()withIdentity( "task_" + jobDetailName、TRIGGER_GROUP).withSchedule(scheduleBuilder).build();
34         scheduler.scheduleJob(jobDetail、トリガー)。
35      }
 36 }

3.フィルタを追加します。

6  インポートlombok.extern.slf4j.Slf4j。
7  インポートorg.quartz.SchedulerException。
8  インポートorg.slf4j.MDC。
9  インポートorg.springframework.beans.factory.annotation.Autowired。
10  インポートorg.springframework.context.ApplicationListener。
11  インポートorg.springframework.context.annotation.Configuration。
12  インポートorg.springframework.context.event.ContextRefreshedEvent。
13  
14  インポートjava.util.UUID。
15  
16  / ** 
17  * @program: 
 18  * @description:启动监听去初始化クォーツ
19  *の@author :DZ
 20は @Create *:2019年10月19日午後06時32
 21である * * / 
22がある SLF4J @
 23で @Configuration
 24  パブリック クラス ApplicationStartQuartzJobListener 実装 ApplicationListener <ContextRefreshedEvent> {
 25      @Autowired
 26は、     プライベートQuartzConf quartzConf;
 27  
28     / * 時間フォーマット:
 29      * * * * * * *
 30      [秒] [分]、[H] [日] [月] [週間] [Y] * / 
31は、 
32      / ** 
33       *初期立ち石英
34は      * / 
35      @Override
 36      公共 ボイドonApplicationEvent(ContextRefreshedEvent ContextRefreshedEvent){
 37 [          試み{
 38は              log.info( "タスクが開始..." );
 39            40              quartzConf.createScheduleJob( "TestTask"、「* / 30 * * * *? "TestTaskの。クラス);
 41は、              log.info("タスクが開始されました... " );
 42れる          } キャッチ(SchedulerException E){
 43が              log.error("タイマータスクが「起動に失敗した、E)を、
 44がある         }
 45      }
 46 }

プロジェクト全体は、時限タスクであれば、実際には、あなたがすることができコング定期的なタスクで書かれているクラス名を直接フィルタリングする必要はありません。タスクを複数のタイミングが存在する場合、トリガーの複数のジョブを定義することができます。このような比較的高い冗長符号

プロジェクトが開始し、リスナーは、タイミングタスクを開くと同等のものをスケジュールするために、すべての定期的なタスクを登録します。この効果は、リスナーがいることです。だから、唯一のトリガージョブを定義する必要があります、あなたは複数のタイミングタスクを書くことができます。

4.スケジュールされたタスクを書きます

1  2  
3  4  インポートlombok.extern.slf4j.Slf4j。
5  輸入org.quartz.Job。
6  インポートorg.quartz.JobExecutionContext。
7  インポートorg.quartz.JobExecutionException。
8  インポートorg.quartz.JobKey。
9  インポートorg.slf4j.MDC。
10  
11  インポートjava.util.UUID。
12  
13  / ** 
14  * @program:
 15  * @description:测试定时任务
 16  * @author :DZ
 17  * @Create:2019年10月19日午前18時49分
 18  ** / 
19  SLF4J @
 20  パブリック クラス TestTaskが実装仕事{
 21      @Override
 22      公共 ボイド(JobExecutionContext jobExecutionContext)を実行スローJobExecutionException {
 23         25          JobKeyキー= jobExecutionContext.getJobDetailを()のgetKey()。
26          // TODOの业务逻辑
27          log.info( "----------" +キー+ "任务执行中、CURRENTTIME:" + DateUtil.getCurrentDate());
28      }
 29 }

 この場所の求人・インタフェースを実現するだけでなく、実際にQuartzJobBeanは仕事のサブクラスですが、いくつかのパラメータが初期化され、QuartzJobBeanクラスを継承することができます

おすすめ

転載: www.cnblogs.com/dz-boss/p/11729505.html