Scheduling Tasks
@Scheduled annotation se, ek method PERIODICALLY ya SPECIFIC times par AUTOMATICALLY RUN ho sakta hai — background jobs ke liye PERFECT (jaise HAR RAAT database cleanup, HAR 5 minute mein external API se data SYNC karna, HAR SUBAH report generate karna).
Teen types hain — fixedRate (HAR N ms par TRIGGER, overlap POSSIBLE agar task LAMBA chale), fixedDelay (PICHLE execution ke KHATAM hone ke N ms BAAD, NO overlap), cron (EXACT SCHEDULE, jaise "0 0 9 * * MON-FRI" = HAR WEEKDAY 9 AM). @EnableScheduling class-level par CHAHIYE, warna @Scheduled SILENTLY IGNORE ho jaata hai.
@Configuration
@EnableScheduling // ISKE BINA, @Scheduled methods SILENTLY ignore ho jaate hain
public class SchedulingConfig { }
@Component
public class ReportScheduler {
@Scheduled(cron = "0 0 9 * * MON-FRI") // har weekday, subah 9 baje
public void generateDailyReport() {
reportService.generate();
}
@Scheduled(fixedDelay = 60000) // pichla khatam hone ke 60 second baad
public void syncExternalData() {
externalApiService.sync();
}
}- fixedRate = fixed interval par, overlap POSSIBLE
- fixedDelay = pichla khatam hone ke N ms baad, NO overlap
- cron = exact schedule (jaise "har weekday 9 AM")
fixedRate = HAR N milliseconds par method TRIGGER hota hai, CHAHE PICHLA execution KHATAM hua ho ya nahi (overlapping possible). fixedDelay = PICHLE execution ke KHATAM hone ke N milliseconds BAAD next execution SHURU hota hai (koi overlap nahi).
@Scheduled(fixedRate = 5000) // har 5 second mein trigger, chahe pichla khatam ho ya nahi
public void checkInventory() { }
@Scheduled(fixedDelay = 5000) // pichla khatam hone ke 5 second baad
public void sendDigestEmail() { }
@Scheduled(cron = "0 0 9 * * MON-FRI") // har weekday, 9 AM par
public void generateDailyReport() { }@EnableScheduling annotation (@Configuration class par) SCHEDULING ko ENABLE karta hai — is annotation ke bina, @Scheduled methods COMPLETELY IGNORE ho jaate hain, koi error bhi NAHI aata (silent failure) — ek COMMON gotcha hai naye developers ke liye.