Spring Boot - Lập lịch

Lập lịch là một quá trình thực hiện các nhiệm vụ trong một khoảng thời gian cụ thể. Spring Boot hỗ trợ tốt để viết lịch trình trên các ứng dụng Spring.

Biểu thức Java Cron

Biểu thức Java Cron được sử dụng để định cấu hình các phiên bản của CronTrigger, một lớp con của org.quartz.Trigger. Để biết thêm thông tin về biểu thức cron Java, bạn có thể tham khảo liên kết này:

https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm

Chú thích @EnableScheduling được sử dụng để kích hoạt bộ lập lịch cho ứng dụng của bạn. Chú thích này sẽ được thêm vào tệp lớp ứng dụng Spring Boot chính.

@SpringBootApplication
@EnableScheduling

public class DemoApplication {
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}

Chú thích @ Đã lên lịch được sử dụng để kích hoạt trình lập lịch trong một khoảng thời gian cụ thể.

@Scheduled(cron = "0 * 9 * * ?")
public void cronJobSch() throws Exception {
}

Sau đây là mã mẫu hiển thị cách thực hiện tác vụ mỗi phút bắt đầu từ 9:00 sáng và kết thúc lúc 9:59 sáng, hàng ngày

package com.tutorialspoint.demo.scheduler;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class Scheduler {
   @Scheduled(cron = "0 * 9 * * ?")
   public void cronJobSch() {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
      Date now = new Date();
      String strDate = sdf.format(now);
      System.out.println("Java cron job expression:: " + strDate);
   }
}

Ảnh chụp màn hình sau đây cho thấy ứng dụng đã bắt đầu như thế nào lúc 09:03:23 và cứ sau một phút kể từ thời điểm đó, tác vụ lập lịch công việc cron đã được thực thi.

Tỷ lệ cố định

Bộ lập lịch Tốc độ Cố định được sử dụng để thực hiện các tác vụ tại thời điểm cụ thể. Nó không chờ đợi cho việc hoàn thành nhiệm vụ trước đó. Các giá trị phải tính bằng mili giây. Mã mẫu được hiển thị ở đây -

@Scheduled(fixedRate = 1000)
public void fixedRateSch() { 
}

Mã mẫu để thực hiện một tác vụ mỗi giây kể từ khi khởi động ứng dụng được hiển thị ở đây -

package com.tutorialspoint.demo.scheduler;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class Scheduler {
   @Scheduled(fixedRate = 1000)
   public void fixedRateSch() {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

      Date now = new Date();
      String strDate = sdf.format(now);
      System.out.println("Fixed Rate scheduler:: " + strDate);
   }
}

Quan sát ảnh chụp màn hình sau đây cho thấy ứng dụng đã khởi động lúc 09:12:00 và sau đó mọi tác vụ lên lịch tốc độ cố định thứ hai đã được thực thi.

Cố định độ trễ

Bộ lập lịch trễ cố định được sử dụng để thực hiện các tác vụ tại một thời điểm cụ thể. Nó sẽ đợi hoàn thành nhiệm vụ trước đó. Các giá trị phải tính bằng mili giây. Một mã mẫu được hiển thị ở đây -

@Scheduled(fixedDelay = 1000, initialDelay = 1000)
public void fixedDelaySch() {
}

Ở đây, InitialDelay là thời gian mà sau đó tác vụ sẽ được thực thi lần đầu tiên sau giá trị trễ ban đầu.

Dưới đây là một ví dụ để thực thi nhiệm vụ mỗi giây sau 3 giây kể từ khi khởi động ứng dụng hoàn tất:

package com.tutorialspoint.demo.scheduler;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class Scheduler {
   @Scheduled(fixedDelay = 1000, initialDelay = 3000)
   public void fixedDelaySch() {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
      Date now = new Date();
      String strDate = sdf.format(now);
      System.out.println("Fixed Delay scheduler:: " + strDate);
   }
}

Quan sát ảnh chụp màn hình sau đây cho thấy ứng dụng đã khởi động lúc 09:18:39 và cứ sau 3 giây, tác vụ lập lịch trình độ trễ cố định sẽ được thực thi trên mỗi giây.