สอนสร้าง Cron Jobs ด้วย Spring Boot
Cron Jobs คือเครื่องมือที่ช่วยให้สามารถกำหนดตารางเวลาสำหรับการทำงานของระบบได้ โดยใน Spring Boot เราสามารถใช้ความสามารถของ @Scheduled
จาก Spring Framework เพื่อจัดการงานที่ต้องการรันตามเวลาที่กำหนดได้ง่าย ๆ
ขั้นตอนการสร้าง Cron Jobs ใน Spring Boot
1. เพิ่ม Dependency
ใน pom.xml
ของโปรเจกต์ Spring Boot ให้ตรวจสอบว่ามี dependency ดังต่อไปนี้
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
2. เปิดใช้งาน Scheduled Tasks
เพิ่มคำสั่ง @EnableScheduling
ในคลาสหลักของโปรเจกต์
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class CronJobApplication {
public static void main(String[] args) {
SpringApplication.run(CronJobApplication.class, args);
}
}
3. สร้าง Scheduled Task
สร้างคลาสใหม่สำหรับการตั้งค่า Cron Job และกำหนดตารางเวลาโดยใช้คำสั่ง @Scheduled
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class TaskScheduler {
// รันทุก ๆ 5 วินาที
@Scheduled(fixedRate = 5000)
public void fixedRateTask() {
System.out.println("Fixed rate task - " + System.currentTimeMillis() / 1000);
}
// รันทุก ๆ 5 วินาที (หลังจากทำงานเสร็จ)
@Scheduled(fixedDelay = 5000)
public void fixedDelayTask() {
System.out.println("Fixed delay task - " + System.currentTimeMillis() / 1000);
}
// ใช้ cron expression เพื่อกำหนดเวลา
@Scheduled(cron = "0 0/1 * * * ?") // รันทุก ๆ นาที
public void cronTask() {
System.out.println("Cron task - " + System.currentTimeMillis() / 1000);
}
}
4. การใช้ Cron Expression
Cron Expression มีรูปแบบดังนี้:
Seconds Minutes Hours DayOfMonth Month DayOfWeek Year (optional)
ตัวอย่าง:
0 0/5 * * * ?
: รันทุก ๆ 5 นาที0 0 12 * * ?
: รันทุก ๆ เที่ยงวัน0 15 10 * * ?
: รันเวลา 10:15 ของทุกวัน
5. การปรับแต่ง Task
- ใช้ fixedRate เมื่อต้องการรันงานตามช่วงเวลาที่แน่นอนโดยไม่สนใจเวลาที่งานใช้เสร็จ
- ใช้ fixedDelay เมื่อต้องการรันงานหลังจากงานก่อนหน้าทำเสร็จแล้ว
ตัวอย่างไฟล์ application.properties
หากต้องการเปลี่ยนโซนเวลา (timezone) หรือปรับแต่ง Scheduler:
spring.task.scheduling.pool.size=10
spring.task.scheduling.thread-name-prefix=Scheduler-
spring.main.time-zone=Asia/Bangkok
สรุป
การสร้าง Cron Jobs ใน Spring Boot ง่ายและสะดวกมาก ด้วย @Scheduled
ที่ช่วยกำหนดเวลาทำงานได้หลากหลายรูปแบบ หากต้องการงานที่มีประสิทธิภาพมากขึ้นสามารถเพิ่ม thread pool หรือปรับแต่งค่าใน application.properties
ได้ตามความต้องการ
ความคิดเห็น
แสดงความคิดเห็น