@Scheduled chạy method theo lịch định kỳ — cron job, background task.
Bật bằng @EnableScheduling trên class config.
java
@Scheduled(fixedRate = 300_000) // mỗi 5 phút (tính từ lúc BẮT ĐẦU lần trước)
void syncExchangeRate() { ... }
@Scheduled(fixedDelay = 30_000) // 30s sau khi lần trước CHẠY XONG
void cleanupTempFiles() { ... }
@Scheduled(cron = "0 0 8 * * MON-FRI", zone = "Asia/Ho_Chi_Minh") // cron + timezone
void morningDigest() { ... }Cron Spring có 6 field (khác Unix 5 field): {giây} {phút} {giờ} {ngày} {tháng} {thứ}.
Lưu ý quan trọng: mặc định mọi @Scheduled chạy trên 1 thread duy nhất → task chậm làm task khác trễ; nhiều job thì config ThreadPoolTaskScheduler với setPoolSize. Chạy nhiều instance: @Scheduled chạy trên MỌI instance → duplicate job; fix bằng ShedLock hoặc Quartz với DB-level lock.