สอนสร้าง 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ได้ตามความต้องการ

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การใช้งาน RPC (Remote Procedure Call) ด้วย Java พร้อมตัวอย่างเกมออนไลน์ (ต่อ)

เริ่มต้นสร้าง Quiz Widgets แบบสอบถามบนเว็บกัน

การใช้งาน RPC (Remote Procedure Call) ด้วย Java พร้อมตัวอย่างเกมออนไลน์อย่างง่าย