@Scheduled


REF: https://www.baeldung.com/spring-scheduled-tasks
  • @Scheduledコメントを使用する規則
  • メソッドの戻りタイプはvoidでなければなりません(
  • )
  • メソッドはパラメータを受け入れません
  • Usage
  • スケジューリング
  • の有効化
    @Configuration
    @EnableScheduling
    public class SpringConfig {
        ...
    }
  • Fixed Delay
  • @Scheduled(fixedDelay = 1000)
    public void scheduleFixedDelayTask() {
        System.out.println(
          "Fixed delay task - " + System.currentTimeMillis() / 1000);
    }
  • Fixed Rate
  • @Scheduled(fixedRate = 1000)
    public void scheduleFixedRateTask() {
        System.out.println(
          "Fixed rate task - " + System.currentTimeMillis() / 1000);
    }
    Fixedrateは、各タスクが独立している場合に使用されます.
    デフォルトでは、タスクが完了していない場合は、次のタスクは実行されません.パラレルX
  • を並列に実行する必要があるジョブについて、@Asyncの他の
  • を追加します.
    @EnableAsync
    public class ScheduledFixedRateExample {
        @Async
        @Scheduled(fixedRate = 1000)
        public void scheduleFixedRateTaskAsync() throws InterruptedException {
            System.out.println(
              "Fixed rate task async - " + System.currentTimeMillis() / 1000);
            Thread.sleep(2000);
        }
     
    }

  • Fixed Rate vs Fixed Delay
    Fixed Delayタスク実行完了時間と次のタスク実行開始時間の間のnミリ秒条件をチェック
  • このオプションは、常に1つのインスタンスジョブのみを実行する必要がある場合に便利です.依存ジョブには
  • が便利です.
    Fixed Rateはnミリ秒ごとに計画タスクを実行します

  • 各ジョブのすべての実行は独立しています.

  • メモリとスレッドプールのサイズを超えないと予想されます.
    タスクがスタックされ続けると、メモリ異常Out of Memory Exceptionが発生する可能性があります.

  • Initial Delay
  • 初期InitialDelayの後にタスクを実行し、fixeddelayを使用してタスクを実行する場合は、初期化時間が必要な場合に便利です.
    @Scheduled(fixedDelay = 1000, initialDelay = 1000)
    public void scheduleFixedRateWithInitialDelayTask() {
      
        long now = System.currentTimeMillis() / 1000;
        System.out.println(
          "Fixed rate task with one second initial delay - " + now);
    }
  • Cron Expressions
  • @Scheduled(cron = "0 15 10 15 * ?")
    public void scheduleTaskUsingCronExpression() {
      
        long now = System.currentTimeMillis() / 1000;
        System.out.println(
          "schedule tasks using cron jobs - " + now);
    }

  • Parameterizing the Schedule
    外部Spring式を使用した設定ファイルにパラメータを注入できます.

  • A fixedDelay task: @Scheduled(fixedDelayString = "${fixedDelay.in.milliseconds}")

  • A fixedRate task: @Scheduled(fixedRateString = "${fixedRate.in.milliseconds}")

  • A cron expression based task: @Scheduled(cron = "${cron.expression}")

  • XML設定の使用
  • <!-- Configure the scheduler -->
    <task:scheduler id="myScheduler" pool-size="10" />
     
    <!-- Configure parameters -->
    <task:scheduled-tasks scheduler="myScheduler">
        <task:scheduled ref="beanA" method="methodA"
          fixed-delay="5000" initial-delay="1000" />
        <task:scheduled ref="beanB" method="methodB"
          fixed-rate="5000" />
        <task:scheduled ref="beanC" method="methodC"
          cron="*/5 * * * * MON-FRI" />
    </task:scheduled-tasks>