Advanced Spring

Scheduling Tasks

@Scheduled, Cron Expressions
💡 @Scheduled ek ALARM CLOCK hai — tum SET karте ho KAB RING karna hai (fixed interval, ya EXACT time jaise "har roz 9 AM"), aur SPECIFIED time par, AUTOMATICALLY task TRIGGER ho jaata hai, bina manual intervention ke.

@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();
    }
}
@Scheduled ek ALARM CLOCK hai — tum SET karте ho KAB RING karna hai (fixed interval, ya EXACT time jaise "har roz 9 AM"), aur SPECIFIED time par, AUTOMATICALLY task TRIGGER ho jaata hai, bina manual intervention ke.
1 / 2
⚡ Quick Recap
  • fixedRate = fixed interval par, overlap POSSIBLE
  • fixedDelay = pichla khatam hone ke N ms baad, NO overlap
  • cron = exact schedule (jaise "har weekday 9 AM")
On this page (2 subtopics)

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.

⚠️Common Mistake: @EnableScheduling BHOOL jaana ek SILENT bug hai — application NORMALLY chalती hai, koi error NAHI aata, lekin scheduled tasks KABHI RUN nahi hote.