フィルム物品は、続けて「:ブート(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クラスを継承することができます