Quartz タスク スケジューリングとは何ですか?
Quartz は、OpenSymphony オープン ソース組織によるジョブ スケジューリングの分野のもう 1 つのオープン ソース プロジェクトであり、J2EE および J2SE アプリケーションと組み合わせて使用することも、単独で使用することもできます。 Quartz は、完全に Java で書かれたオープンソースのジョブ スケジューリング フレームワークです。ジョブ スケジュールという言葉を怖がらないでください。 Quartz フレームワークには多くの追加機能が組み込まれていますが、そのシンプルな形式で、耐えられないほど使いやすいことがわかります。
実際のところ、彼はまだ明確に説明していませんでしたが、簡単に言っておきます。Quartz ジョブ スケジューリングはスケジュールされたタスクを実装できます。 Windows と同様のタスク スケジュール、.Net 上の Windows サービスによって実装されたスケジュールされたタスクなどを実装できます。また、Spring フレームワークと組み合わせると非常に使いやすく、時間設定が少し難しいことを除けば、耐えられません。わかりにくい... それは重要ではありません。解決策は後で説明します。
ここで要件があります。ユーザーがシステムで操作を完了すると、ユーザーにゴールド コインで報酬を与えますが、パフォーマンスの問題を考慮して、すぐにユーザーにリチャージするのではなく、非同期を使用するか、ユーザーにリチャージする予定ですこの時間帯はユーザーが比較的少ないため、アカウントは一律午前 1 時に登録されます。あなたは何をしますか?
1. GoldQuartz.java ファイルを追加します
もちろん、私と同じように、スケジュールされたタスクを実行するためのクラスを配置するために特別に使用される cn.mayongfa.quartz パッケージ パッケージを追加することもできます。
このクラスの目的は、定期的にユーザーにゴールド コインを自動的に追加することです。
えー終わった?そうですね、それはとても簡単です。主に @Scheduled の cron の意味に関係しますが、これではまったく理解できないので、その書き方と自動生成の方法について以下に説明します。
2. springMVC-servlet.xml ファイルを設定します
@Component public class GlodQuartz { /** * 用户自动加金币 * 每天凌晨一点执行一次 */ @Scheduled(cron = "0 0 1 * * ? ") public void addUserGold() { System.out.println("凌晨一点了,你睡了么?"); } /** * 每隔5秒定时清理缓存 */ @Scheduled(cron = "*/5 * * * * ? ") public void cacheClear() { System.out.println("时间又过去5秒了,真令人伤感..."); } }
実際にはとても簡単で完了です。とても使いやすいので、我慢できません。この
<!-- 扫描定时作业调度包 --> <task:annotation-driven /> <context:component-scan base-package="cn.mayongfa.quartz"/>
実行して結果を確認します
自分のニーズ 実行したいスケジュールされたタスクを完了しました。では、@Scheduled の cron が何を意味するのか詳しく説明しましょう。
Cron 式には、秒、分、時、日、月、曜日、年 (オプションのフィールド) の 7 つのフィールドが含まれます。
Cron トリガーでは一連の特殊文字も使用します。
バックスラッシュ (/) 文字は増分値を表します。たとえば、秒フィールドの「5/15」は、5 秒目から始まる 15 秒ごとを意味します。
疑問符 (?) 文字と文字 L 文字は、月の日と曜日のフィールドでのみ使用できます。疑問符は、このフィールドに特定の値が含まれていないことを示します。したがって、月内の日を指定する場合は、曜日フィールドに「?」を挿入して、曜日の値が重要ではないことを示すことができます。 L という文字は、last の略です。月の最終日に実行をスケジュールするには、日付フィールドにそれを入力します。曜日フィールドでは、「L」が単独で存在する場合は「7」と等しくなります。それ以外の場合は、月内の曜日の最後のインスタンスを表します。したがって、「0L」は、月の最終日曜日に実行されるようにスケジュールされていることを意味します。
「月日」フィールドの文字 (W) は、指定された値に最も近い平日に実行をスケジュールします。月の最初の営業日に実行をスケジュールするには、月の日付フィールドに「1W」を入力します。
ポンド (#) 文字は、特定の月の特定の営業日インスタンスを指定します。タスクを月の第 2 月曜日にスケジュールするには、曜日フィールドに「MON#2」を入力します。
アスタリスク (*) 文字はワイルドカード文字であり、フィールドが任意の値を受け入れることができることを示します。
要約すると
定期的にコードを実行する必要がある場合、ジョブ スケジューリングを使用できます。これを Spring と組み合わせると非常に便利です。 Quartz を使用すると、コードをすばやく作成できるようになります。数日前、プロジェクト チームの同僚がそれについて教えてくれたので、私はそれを使用しました。
Java で Quartz タスク スケジューリング タイマーを使用する Spring に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。