春ブーツとタスク時限リマインダークォーツを達成

当社の製品は、当社の顧客は、多くの場合、このような需要を提唱し、ツール(製品名光の流れ)を構築するためのコードフリーのビジネスプロセスであります:

「時間のタスクは、ノードが処理されない場合ので、私たちは、それぞれのノードに加えて時間制限を検討するために、コントロールにスケジュールを作るために、その後のタイムアウトそれをしたいです!」

「時間はあなたが期間限定のタスクに近づいたときに、光ストリーム機能を行うこのタスクの担当者を思い出させることができない、限られたタスクもっと重要なのですか?」

......

可視性は、適時タスクは、我々はこの目標を「人々を思い出させるためにノードを行くために一定の時間を」達成すべきか、非常に重要なものですか?

私たちは知っている、春ブーツは、通常のタスク@Scheduleノートで達成することができるが、この方法が唯一の固定されたタイムスケジュールを達成することができますスケジューリング機能が付属しています。ユーザーのニーズは、カスタムタスクの開始時間を計時されます。システムが再起動された場合重要なのは、元のメモリタイミングタスクがリリースされます!これは深刻な問題です。

この時間は、クォーツこのツールは便利です。

クォーツは、(オープンソース組織の貢献のおかげで)優れたオープンソースのスケジューリングフレームワークであり、それは、次のような多くの利点があります:

(1)強力にサポート豊富なスケジューリング方法、および同時にスケジュール、時限タスクの数千人をサポートしています。

(2)ミッションをサポートし続けて、タスクをスケジュールする前に、「忘れる」、再起動後にシステムを心配しないでください。

サポートは、分散(3)、あなたは(リンキンオープンソースのスケジューリングツールアズカバンは石英に基づいて実装されている)、タスクのスケジューリングを実行するために、複数のexecutorを設定し、負荷分散と信頼性を向上させることができます。

クォーツコアコンセプト

クォーツは、いくつかの中核となる概念をされています

スケジューラ:タスクスケジューラ

トリガー:スケジュールされた時間のルールを定義するトリガー、

求人:タスクスケジューラのスケジュールタスクすなわち、

キー:名前(名)とグループ(グループ)を含むとき、私たちは仕事をトリガし、スケジューラに登録されます、あなたは彼らにキーを割り当てる必要があります。

示されているような関係の石英コアコンセプト:

春ブーツとタスク時限リマインダークォーツを達成

(出典:IBM)

作業プロセスコンポーネント:

(1)スケジューラインスタンスはSchedulerFactoryを使用して作成され

SchedulerFactory工場=新しいSchedulerFactory();
スケジューラスケジューラ= factory.getScheduler()。
(2)创建一个任务

仕事= JobBuilder.newJob JobDetail(CustomJob.class).withIndentity( "MYJOB"、 "myGroupが")のビルド();.
CustomJob時限タスククラスは、カスタムです。

(3)、トリガーを作成するどのような時にタスクの実行を指定します

トリガ= TriggerBuilder.newTrigger.withIndentityトリガー(「myTrigger」、「myGroupが」)
.startAt(targerDate).build()
、TargetDateはjava.util.Date型であり、タスクを実行するためにどのような時に指定するために使用されます。

(4)タスクスケジューラに登録

scheduler.scheduleJob(ジョブ、トリガ)
タスクスケジューリングアップした後は、タスクは、指定された時間の友人で実行されます。

春ブーツで

以前の私たちは、その後どのように春のブートを使用するように、クォーツ基本的なワークフローを導入しましたか?定期的なタスクはどのように支えていますか?

春のブートバージョン2.0では、クォーツ2.3.0バージョンに統合された、春ブーツは、手動操作の多くを排除し、クォーツの構成を自動化し、開発圧力のプログラマを減らすことができました

(1)のGradle春の起動中に存在するプロジェクトのファイル依存石英スターターを導入

コンパイル(「org.springframework.boot:春ブートスタータ石英」)
(2)のテーブルを作成するために必要なデータソースのMySQLの項目に対応する石英SQL文に指定された(文字コードの最後を参照)

(3)添加石英application.propertiesに配置されています

=タイプ・ストアspring.quartz.job JDBCの
spring.quartz.jdbc.initialize-スキーマ=決して
加え、我々は春ブーツが自動的に私たちのために構成され、他の構成を記述しないでください。

この設定の後、すべての石英のタスクが自動的に失われることはありません、でのmysqlに永続化されています。

(4)タスクスケジューリングコード

私たちが直接噴射スケジューラスケジューラを使用するために必要な場合、//、春ブーツが設定されています

Schedulerインスタンス

@Autowire
プライベートスケジューラスケジューラ;
//タスクスケジューリング
列JobKey = UUID.randomUUID()のtoString();.
列triggerKey = UUID.randomUUID()のtoString();.
JobDetail jobDetail = JobBuilder.newJob(CustomNotifyTask.class)
.withIdentity( JobKey、CustomTask.class.getName())
.build();
トリガトリガ= TriggerBuilder.newTrigger()
.withIdentity(triggerKey、CustomTask.class.getName())
.startAt(targetdate).build();
//スケジューリングを開始
scheduler.scheduleJob(jobDetail、トリガ);
CustomTaskタスクは、そのexecuteInternal QuartzJobBeanを継承し、インタフェースを実装するクラスです。

拡張CustomTask QuartzJobBean {クラス公開BR /> @オーバーライド
無効executeInternal(JobExecutionContextコンテキスト){保護
するSystem.out.println(「Hello Worldのを」);
}
}
このように、我々は、単一の連続クォーツノードスケジューラの使用を示します。

ボーナス:定期的なタスクへのパスパラメータ
、一般的には、豊富な機能を実現するために、定期的なタスクのパラメータを受信する必要があります。たとえば、私たちは、電子メールアドレスがパラメータに渡され、メールボックスのカスタムタイミングタスクにメッセージを送りたいです。

クォーツの枠組みでは、タイマータスクにパラメータを渡すことは非常に便利です。

タスクをスケジュールするとき、パラメータのmyNumberを渡します。

JobDetail = JobBuilder.newJob JobDetail(CustomNotifyTask.class)
.withIdentity(JobKey、CustomTask.class.getName())
.usingJobData( "myNum"、myNumber)
.usingJobData( "メールで送信"、電子メールで)
.build();
タスクを実行しますパラメータmyNumberを取得するとき。

@Override
保護executeInternal(JobExecutionContextコンテキスト){ボイド
JobDataMapデータマップ= context.getJobDetail()getJobDataMap()。
整数applyId = dataMap.getInt( "mynum")。
文字列の電子メール= dataMap.getInt( "メール");
// .......
}

拡張:クォーツクラスター

個々のクォーツスケジューラインスタンス(スタンドアロン版)ができますが、私たちは、タスクスケジューリングのための非常に良いことにするが、そのような信頼性、可用性、およびスケーラビリティなどのエンタープライズアプリケーション、ますます複雑な要件を満たすことができません。我々のマルチタスクスケジューリングした場合、クォーツクラスターを考慮しなければ、その後です。ときにクラッシュクォーツインスタンス、クラスタの別のインスタンスは、すぐに仕事の実施を確保するためにその仕事を引き継ぐことができます。

石英クラスタ構成は、それに興味があれば、そのようなhttps://medium.com/@Hronom/spring-boot-quartz-scheduler-in-cluster-mode-457f4535104d,Quartzなどの多くの機能の会場であってもよいし、多少複雑ですあなたが探索するために!

おすすめ

転載: blog.51cto.com/14502444/2429860