0Pricing
Spring Boot 4 Microservices & REST APIs · درس

الجدولة باستخدام @Scheduled

شغّل المهام بمعدل ثابت أو وفق cron

الجدولة باستخدام @Scheduled درس مجاني في Spring Boot 4 Microservices & REST APIs على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Spring Boot 4 Microservices & REST APIs، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Spring Boot 4 Microservices & REST APIs 4 دروس في المجموع.

بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.

Scheduling in Spring Boot

Spring Boot lets you run methods automatically on a schedule without any external cron daemon. You annotate a method with @Scheduled and Spring invokes it repeatedly in the background.

  • Perfect for cleanup jobs, polling, report generation
  • No extra infrastructure needed

Enabling scheduling

Scheduling is off by default. You turn it on with @EnableScheduling on a configuration class (often the main application class).

import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableScheduling
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

fixedRate

fixedRate runs the method at a fixed interval measured from the start of one run to the start of the next. The value is in milliseconds.

@Component
public class RateTask {

    @Scheduled(fixedRate = 5000)
    public void report() {
        System.out.println("Runs every 5 seconds");
    }
}

fixedDelay

fixedDelay waits a fixed gap after the previous run finishes before starting the next one. Use it when runs must never overlap.

@Scheduled(fixedDelay = 5000)
public void process() {
    // next run starts 5s AFTER this one ends
    doWork();
}

fixedRate vs fixedDelay

The key difference is the reference point:

  • fixedRate = interval between start times (can overlap if a run is slow)
  • fixedDelay = gap between end and next start (never overlaps)

initialDelay

initialDelay delays the first execution after startup. Combine it with fixedRate or fixedDelay to avoid running immediately on boot.

@Scheduled(initialDelay = 10000, fixedRate = 5000)
public void warmThenRun() {
    // waits 10s after startup, then every 5s
}

cron expressions

For calendar-based scheduling use cron. Spring cron has 6 fields: second, minute, hour, day-of-month, month, day-of-week.

@Scheduled(cron = "0 0 9 * * MON-FRI")
public void weekdayMorning() {
    // 09:00:00 every weekday
}

Reading cron fields

An asterisk * means "every value". A ? can be used in day-of-month or day-of-week when one is unspecified. Ranges (MON-FRI), lists (1,15) and steps (*/10) are supported.

@Scheduled(cron = "*/30 * * * * *") // every 30 seconds
public void everyHalfMinute() { }

@Scheduled(cron = "0 0 0 1 * *") // midnight on the 1st of every month
public void monthly() { }

Time zones

By default cron uses the server time zone. Set zone to make schedules explicit and predictable across environments.

@Scheduled(cron = "0 0 8 * * *", zone = "Europe/Istanbul")
public void eightAmIstanbul() { }

Externalizing the schedule

Hardcoding intervals is inflexible. Use a property placeholder so the schedule can change per environment without recompiling.

@Scheduled(fixedRateString = "${app.report.rate:5000}")
public void report() { }

// application.yml
// app:
//   report:
//     rate: 10000

Scheduling pitfalls

By default a single thread runs all scheduled tasks, so a slow task can delay others. For parallel execution configure a ThreadPoolTaskScheduler. Also keep scheduled methods idempotent in case of restarts.

Quick Check

Test your understanding of scheduling.

Recap

You learned how to schedule work in Spring Boot:

  • @EnableScheduling turns the feature on
  • fixedRate = start-to-start, fixedDelay = end-to-start
  • cron handles calendar schedules; set zone for clarity
  • Externalize intervals with property placeholders

الأسئلة الشائعة

هل درس «الجدولة باستخدام @Scheduled» مجاني؟

نعم — نص درس «الجدولة باستخدام @Scheduled» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Spring Boot 4 Microservices & REST APIs، انتقل إلى CoddyKit PRO. تتضمن دورة Spring Boot 4 Microservices & REST APIs 4 دروس في المجموع.

ماذا ستتعلم في «الجدولة باستخدام @Scheduled»؟

شغّل المهام بمعدل ثابت أو وفق cron تتمرن على Spring Boot 4 Microservices & REST APIs مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Spring Boot 4 Microservices & REST APIs؟

لا تُشترط خبرة سابقة. Spring Boot 4 Microservices & REST APIs على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «الجدولة باستخدام @Scheduled»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Spring Boot 4 Microservices & REST APIs هذا؟

نعم. كل درس في Spring Boot 4 Microservices & REST APIs يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الجدولة باستخدام @Scheduled
  2. مهام Spring Batch وخطواتها
  3. القارئات والمعالجات والكتّاب
  4. إعادة التشغيل ومعالجة الأخطاء
← العودة إلى Spring Boot 4 Microservices & REST APIs