実際の開発プロジェクトのプロセスでは、1 時間ごとに新規登録ユーザーの数を数えたり、毎日午前 1 時にサーバーのキャッシュを消去したり、その数を数えたりするなど、いくつかのことを実行するためにスケジュールされたタスクが必要になることがよくあります。毎週金曜日の購入会員数、ユーザー数等
バージョン 2.0 以降、SpringBoot では、構成ファイルや依存関係を追加せずに、スケジュールされたタスク プログラムを作成するための非常に便利なアノテーション メソッドが提供されています。アノテーションを追加することで、SpringBoot プロジェクトをすばやく構築できます。
@SpringBootApplication @EnableScheduling public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
@EnableScheduling: スケジュールされたタスクのサポートを有効にする
アノテーション メソッド - シングル スレッド
SchedulerTask1 クラスを作成し、以下に保存します。タスク パッケージ:
@Component public class SchedulerTask1 { @Scheduled(cron = "*/6 * * * * ?") private void process(){ System.out.println("SchedulerTask1 : " + LocalDateTime.now().toLocalTime() + "\r\n线程 : " + Thread.currentThread().getName()); } }
SchedulerTask2 クラスを作成し、タスク パッケージの下に保存します:
@Component public class SchedulerTask2 { @Scheduled(fixedRate = 3000) private void process(){ System.out.println("SchedulerTask2 : " + LocalDateTime.now().toLocalTime() + "\r\n线程 : " + Thread.currentThread().getName()); } }
@スケジュールされたパラメーターは 2 つのタイミング設定を受け入れることができます。1 つは一般的に使用される cron="*/6 * * * * ?"、1 つは fixRate = 3000、どちらも X 秒ごとにコンテンツを印刷することを意味します。
fixedRate 説明
@Scheduled(fixedRate = 3000): 最後の実行時点から 3 秒後に実行
@Scheduled(fixedDelay = 3000) : 前回の実行完了時刻から 3 秒後に実行
@Scheduled(initialDelay=1000,fixedRate=6000): 最初の 1 秒の遅延後に実行し、
fixedRate を押す ルール6 秒ごとに実行されます
Cron 式パラメータはそれぞれ次のことを表します:
秒 (0~59) たとえば、0/5 は 5 秒ごとを意味します
分 (0 ~ 59)
時間 (0 ~ 23)
日 (0 ~ 31) 特定の日には、
月 (0 ~ 11) が必要です。計算されます
曜日 (1 ~ 7 または SUN/MON/TUE/WED/THU/FRI/SAT で入力可能)
プロジェクトの開始、実行結果は次のとおりです。
SchedulerTask2 : 21:36:47.795008800 线程 : scheduling-1 SchedulerTask1 : 21:36:48.014888600 线程 : scheduling-1 SchedulerTask2 : 21:36:50.792887400 线程 : scheduling-1 SchedulerTask2 : 21:36:53.792697900 线程 : scheduling-1 SchedulerTask1 : 21:36:54.002684700 线程 : scheduling-1 SchedulerTask2 : 21:36:56.792517700 线程 : scheduling-1 SchedulerTask2 : 21:36:59.792606400 线程 : scheduling-1 SchedulerTask1 : 21:37:00.002598400 线程 : scheduling-1 SchedulerTask2 : 21:37:02.792423300 线程 : scheduling-1 SchedulerTask2 : 21:37:05.802238 线程 : scheduling-1 SchedulerTask1 : 21:37:06.002225200 线程 : scheduling-1
上記の 2 つのスケジュールされたタスクが同時に実行されると、同じスレッド (scheduling-1) が使用され、タスクの実行時間は前のタスクの実行時間の影響を受けます。
アノテーション メソッド - マルチスレッド
新しい MultithreadScheduleTask クラスを作成し、タスク パッケージの下に保存します:
@Component @EnableAsync public class MultithreadScheduleTask { @Async @Scheduled(fixedDelay = 1000) public void first() throws InterruptedException { System.out.println("第一个定时任务开始 : " + LocalDateTime.now().toLocalTime() + "\r\n线程 : " + Thread.currentThread().getName()); Thread.sleep(1000 * 10); } @Async @Scheduled(fixedDelay = 2000) public void second() { System.out.println("第二个定时任务开始 : " + LocalDateTime.now().toLocalTime() + "\r\n线程 : " + Thread.currentThread().getName()); System.out.println(); } }
@EnableAsync:マルチスレッドを有効にする
プロジェクトを開始すると、実行結果は次のようになります:
第一个定时任务开始 : 21:48:47.121991300 线程 : task-1 第二个定时任务开始 : 21:48:47.121991300 线程 : task-2 第一个定时任务开始 : 21:48:48.121930600 线程 : task-3 第二个定时任务开始 : 21:48:49.114640 线程 : task-4 第一个定时任务开始 : 21:48:49.114640 线程 : task-5 第一个定时任务开始 : 21:48:50.119792400 线程 : task-6 第二个定时任务开始 : 21:48:51.119726900 线程 : task-7 第一个定时任务开始 : 21:48:51.129727800 线程 : task-8 第一个定时任务开始 : 21:48:52.130157200 线程 : task-2 第二个定时任务开始 : 21:48:53.120096500 线程 : task-4 第一个定时任务开始 : 21:48:53.140095 线程 : task-7 第一个定时任务开始 : 21:48:54.140429600 线程 : task-4 第二个定时任务开始 : 21:48:57.130710 线程 : task-1
以上がSpringBoot でスケジュールされたタスクの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。