Bird
Raised Fist0
Spring Bootframework~10 mins

Scheduled tasks with @Scheduled in Spring Boot - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Scheduled tasks with @Scheduled
Application starts
↓
Spring scans for @Scheduled
↓
Schedule task setup
↓
Wait for trigger time
↓
Run scheduled method
↓
Task completes
↓
Wait for next trigger
↩Loop back to Run scheduled method
Spring Boot starts, finds methods marked with @Scheduled, sets timers, and runs those methods repeatedly at set times.
Execution Sample
Spring Boot
@Scheduled(fixedRate = 2000)
public void sayHello() {
  System.out.println("Hello every 2 seconds");
}
This method prints a message every 2 seconds automatically.
Execution Table
StepTime (ms)ActionOutputNext Trigger
10Application starts, schedules sayHello()2000
22000sayHello() runsHello every 2 seconds4000
34000sayHello() runsHello every 2 seconds6000
46000sayHello() runsHello every 2 seconds8000
58000sayHello() runsHello every 2 seconds10000
610000sayHello() runsHello every 2 seconds12000
712000Application stops or continues scheduling
💡 Application stops or user interrupts; scheduled tasks stop running.
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5Final
Next Trigger (ms)20004000600080001000012000Stopped or continues
Key Moments - 3 Insights
Why does the scheduled method run automatically without being called?
Because Spring detects @Scheduled and sets timers to call the method at fixed intervals (see execution_table steps 2-6).
What happens if the method takes longer than the fixedRate to run?
Spring will still trigger the next run based on fixedRate timing, possibly causing overlap or delays depending on configuration.
How does Spring know when to run the method next?
Spring calculates the next trigger time after each run, shown in the 'Next Trigger' column in execution_table.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the output at step 4?
AHello every 2 seconds
BNo output
CError message
DHello every 4 seconds
💡 Hint
Check the 'Output' column at step 4 in the execution_table.
At which step does the next trigger time become 8000 ms?
AStep 2
BStep 3
CStep 4
DStep 5
💡 Hint
Look at the 'Next Trigger' column in the execution_table for the value 8000.
If fixedRate is changed to 1000 ms, how would the 'Next Trigger' values change?
AThey would stay the same
BThey would increase by 1000 ms each step
CThey would increase by 4000 ms each step
DThey would decrease
💡 Hint
Compare the current fixedRate of 2000 ms with the new 1000 ms in variable_tracker.
Concept Snapshot
@Scheduled annotation runs methods automatically on a schedule.
Use fixedRate to run repeatedly every set milliseconds.
Spring sets timers and calls the method without manual calls.
Next trigger time updates after each run.
Useful for tasks like cleanup, notifications, or polling.
Full Transcript
When a Spring Boot application starts, it looks for methods marked with @Scheduled. It sets timers to run these methods automatically at fixed intervals, like every 2 seconds. The method runs without needing to be called manually. After each run, Spring calculates the next time to run the method again. This continues until the application stops or the scheduling is disabled. This helps automate repeated tasks easily.

Practice

(1/5)
1. What is the main purpose of the @Scheduled annotation in Spring Boot?
easy
A. To run a method automatically at fixed intervals or times
B. To mark a method as a REST endpoint
C. To inject dependencies into a class
D. To configure database connections

Solution

  1. Step 1: Understand the role of @Scheduled

    The @Scheduled annotation is used to mark methods that should run automatically on a schedule without manual calls.
  2. Step 2: Compare with other options

    Options A, C, and D relate to other Spring features like REST, dependency injection, and database setup, not scheduling.
  3. Final Answer:

    To run a method automatically at fixed intervals or times -> Option A
  4. Quick Check:

    @Scheduled = automatic method run [OK]
Hint: Remember: @Scheduled means automatic timed method run [OK]
Common Mistakes:
  • Confusing @Scheduled with REST or dependency injection annotations
  • Thinking @Scheduled configures databases
  • Assuming @Scheduled requires manual method calls
2. Which of the following is the correct way to schedule a method to run every 5 seconds using @Scheduled?
easy
A. @Scheduled(fixedDelay = 5000)
B. @Scheduled(rate = 5)
C. @Scheduled(cron = "0 */5 * * * *")
D. @Scheduled(fixedRate = 5000)

Solution

  1. Step 1: Understand fixedRate vs fixedDelay

    fixedRate runs the method every specified milliseconds regardless of method duration. fixedDelay waits after method finishes before next run.
  2. Step 2: Check the options

    @Scheduled(fixedRate = 5000) uses fixedRate = 5000 which means run every 5 seconds. @Scheduled(fixedDelay = 5000) uses fixedDelay which waits after method ends. @Scheduled(rate = 5) uses invalid attribute rate. @Scheduled(cron = "0 */5 * * * *") uses a cron expression which runs every 5 minutes.
  3. Final Answer:

    @Scheduled(fixedRate = 5000) -> Option D
  4. Quick Check:

    fixedRate = 5000 means every 5 seconds [OK]
Hint: Use fixedRate for exact interval runs in milliseconds [OK]
Common Mistakes:
  • Using 'rate' instead of 'fixedRate'
  • Confusing fixedDelay with fixedRate
  • Incorrect cron syntax for simple intervals
3. Given the code below, what will be printed and how often?
@Scheduled(fixedDelay = 3000)
public void printMessage() {
    System.out.println("Hello World");
}
medium
A. Method runs only once after 3 seconds delay
B. "Hello World" prints every 3 seconds regardless of method duration
C. "Hello World" prints every 3 seconds after method finishes
D. Code will cause a compilation error

Solution

  1. Step 1: Understand fixedDelay behavior

    fixedDelay = 3000 means the method runs, then waits 3 seconds after it finishes before running again.
  2. Step 2: Analyze the print output frequency

    Since the method prints "Hello World" each time it runs, it will print every 3 seconds after the previous run completes.
  3. Final Answer:

    "Hello World" prints every 3 seconds after method finishes -> Option C
  4. Quick Check:

    fixedDelay = wait after method ends [OK]
Hint: fixedDelay waits after method ends before next run [OK]
Common Mistakes:
  • Confusing fixedDelay with fixedRate
  • Thinking method runs only once
  • Assuming compilation error without reason
4. Identify the error in this scheduled task code:
@Scheduled(fixedRate = "5000")
public void task() {
    System.out.println("Running task");
}
medium
A. fixedRate value should be a number, not a string
B. Method must return a value
C. Missing @EnableScheduling annotation on class
D. Method name cannot be 'task'

Solution

  1. Step 1: Check fixedRate attribute type

    The fixedRate attribute expects a long number (milliseconds), not a string. Using quotes causes a syntax error.
  2. Step 2: Verify other options

    Method can be void, so no return needed. Missing @EnableScheduling is a configuration issue but not a syntax error here. Method name 'task' is valid.
  3. Final Answer:

    fixedRate value should be a number, not a string -> Option A
  4. Quick Check:

    fixedRate expects number, not string [OK]
Hint: fixedRate and fixedDelay need numbers, no quotes [OK]
Common Mistakes:
  • Putting quotes around fixedRate or fixedDelay values
  • Assuming method must return a value
  • Confusing configuration errors with syntax errors
5. You want a method to run every Monday at 8:30 AM using @Scheduled. Which cron expression is correct?
hard
A. @Scheduled(cron = "30 8 * * 1")
B. @Scheduled(cron = "0 30 8 ? * MON")
C. @Scheduled(cron = "0 8 30 * * MON")
D. @Scheduled(cron = "0 30 8 * * 1")

Solution

  1. Step 1: Understand cron format in Spring

    Spring cron has 6 fields: second, minute, hour, day of month, month, day of week.
  2. Step 2: Analyze each option

    @Scheduled(cron = "0 30 8 ? * MON"): "0 30 8 ? * MON" means at second 0, minute 30, hour 8, any day of month (?), any month (*), on Monday (MON). This matches 8:30 AM Monday.
    @Scheduled(cron = "30 8 * * 1") is missing seconds field and uses 5 fields.
    @Scheduled(cron = "0 8 30 * * MON") has hour and minute swapped.
    @Scheduled(cron = "0 30 8 * * 1") uses day of week as 1 which is Sunday in some systems, MON is clearer.
  3. Final Answer:

    @Scheduled(cron = "0 30 8 ? * MON") -> Option B
  4. Quick Check:

    Spring cron: sec min hour day month weekday [OK]
Hint: Spring cron has 6 fields; use '?' for day of month if using day of week [OK]
Common Mistakes:
  • Using 5-field cron instead of 6-field in Spring
  • Swapping hour and minute positions
  • Using numeric day of week without knowing system mapping
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard