Bird
Raised Fist0
Spring Bootframework~10 mins

Cron expressions for scheduling in Spring Boot - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Cron expressions for scheduling
Start
↓
Define cron expression
↓
Spring parses expression
↓
Schedule task at specified times
↓
Task runs
↓
Wait for next scheduled time
↩Back to Schedule task
This flow shows how Spring Boot reads a cron expression, schedules a task, runs it at the right time, then waits for the next run.
Execution Sample
Spring Boot
@Scheduled(cron = "0 0/1 * * * ?")
public void runTask() {
    System.out.println("Task runs every minute");
}
This code schedules a task to run every minute using a cron expression.
Execution Table
StepCron Expression PartValueMeaningAction
1Seconds0At second 0Task triggers at start of minute
2Minutes0/1Every 1 minute starting at 0Task runs every minute
3Hours*Every hourNo hour restriction
4Day of Month*Every dayNo day restriction
5Month*Every monthNo month restriction
6Day of Week?No specific day of weekIgnored because day of month is *
7Year (optional)Not specifiedRuns every year
8Task runsN/AAt each matching timePrints "Task runs every minute"
9WaitN/AWaits until next minuteCycle repeats
10ExitN/ANever exitsRuns indefinitely
💡 Cron tasks run indefinitely until application stops
Variable Tracker
VariableStartAfter 1 minAfter 2 minAfter 3 minFinal
Current Time (minute)0123N/A
Task TriggeredNoYesYesYesN/A
Key Moments - 3 Insights
Why does the task run every minute and not every second?
Because the cron expression sets seconds to 0 and minutes to 0/1, so it triggers only at second 0 of every minute (see execution_table step 1 and 2).
What does the '?' symbol mean in the day of week field?
It means 'no specific value' and is used when day of month is specified as '*', so Spring ignores day of week (see execution_table step 6).
Why does the task never stop running?
Because cron schedules repeat indefinitely until the app stops (see execution_table step 10).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, at which step does the task actually run?
AStep 2
BStep 8
CStep 6
DStep 10
💡 Hint
Check the 'Action' column for when the task prints output.
According to variable_tracker, what is the value of 'Task Triggered' after 2 minutes?
AMaybe
BNo
CYes
DUndefined
💡 Hint
Look at the 'After 2 min' column for 'Task Triggered'.
If the minutes part changed from '0/1' to '0/5', how would the execution table change?
ATask runs every 5 minutes instead of every minute
BTask runs every second
CTask runs only once
DTask runs every hour
💡 Hint
Look at step 2 where minutes are defined.
Concept Snapshot
Cron expressions schedule tasks by specifying time parts:
Seconds Minutes Hours DayOfMonth Month DayOfWeek Year(optional)
Use * for any value, / for intervals, ? for no specific value.
Spring Boot reads this to run tasks repeatedly at matching times.
Example: "0 0/1 * * * ?" runs task every minute at second 0.
Full Transcript
Cron expressions let you schedule tasks by defining when they run using six or seven parts: seconds, minutes, hours, day of month, month, day of week, and optionally year. In Spring Boot, you use @Scheduled with a cron string. For example, "0 0/1 * * * ?" means run at second 0, every 1 minute, every hour, every day, every month, ignoring day of week. The task runs at these times repeatedly until the app stops. The '?' means no specific value for day of week because day of month is '*'. This way, Spring parses the expression, schedules the task, runs it at the right times, then waits for the next scheduled time. Beginners often wonder why the task runs every minute and not every second; that is because seconds is fixed at 0. They also ask about '?', which means no specific value. Finally, cron tasks run indefinitely unless stopped.

Practice

(1/5)
1. What does a cron expression in Spring Boot primarily specify?
easy
A. The output format of the task
B. When a scheduled task should run
C. The name of the scheduled task
D. The priority of the task

Solution

  1. Step 1: Understand the purpose of cron expressions

    Cron expressions define timing details for scheduling tasks.
  2. Step 2: Identify what cron expressions control in Spring Boot

    They tell Spring Boot exactly when to run a method automatically.
  3. Final Answer:

    When a scheduled task should run -> Option B
  4. Quick Check:

    Cron expression = schedule time [OK]
Hint: Cron expressions set task run times, not names or outputs [OK]
Common Mistakes:
  • Thinking cron sets task names
  • Confusing cron with output formatting
  • Assuming cron controls task priority
2. Which of the following is the correct syntax to schedule a method to run every minute using Spring Boot's @Scheduled annotation with a cron expression?
easy
A. @Scheduled(cron = "*/1 * * * *")
B. @Scheduled(cron = "* * * * *")
C. @Scheduled(cron = "0 0/1 * * ?")
D. @Scheduled(cron = "0 * * * * *")

Solution

  1. Step 1: Recall Spring Boot cron format

    Spring Boot cron uses 6 fields: seconds, minutes, hours, day, month, weekday.
  2. Step 2: Identify correct expression for every minute

    "0 * * * * *" means at 0 seconds every minute, every hour, every day.
  3. Final Answer:

    @Scheduled(cron = "0 * * * * *") -> Option D
  4. Quick Check:

    6-field cron with 0 seconds = every minute [OK]
Hint: Spring Boot cron needs 6 fields; seconds first [OK]
Common Mistakes:
  • Using 5-field cron (missing seconds)
  • Misplacing seconds field
  • Using '?' in wrong position
3. Given the cron expression "0 15 10 * * ?" in a Spring Boot @Scheduled annotation, when will the scheduled method run?
medium
A. Every day at 10:15 AM
B. Every hour at 15 minutes past
C. Every day at 10:00 AM
D. Every minute at 15 seconds past

Solution

  1. Step 1: Break down the cron fields

    Fields: seconds=0, minutes=15, hours=10, day=any, month=any, weekday=? (no specific day)
  2. Step 2: Interpret the timing

    Means run at 10:15:00 every day, ignoring weekday.
  3. Final Answer:

    Every day at 10:15 AM -> Option A
  4. Quick Check:

    0 15 10 * * ? = daily 10:15 AM [OK]
Hint: Seconds first, then minutes, then hours in Spring cron [OK]
Common Mistakes:
  • Confusing minutes and hours positions
  • Ignoring '?' meaning in weekday
  • Assuming it runs every hour
4. Identify the error in this Spring Boot cron expression: @Scheduled(cron = "0 0 25 * * ?")
medium
A. Seconds field missing
B. Day of month field is invalid
C. Hour value 25 is invalid
D. Weekday field cannot be '?'

Solution

  1. Step 1: Check each cron field's valid range

    Seconds: 0-59, Minutes: 0-59, Hours: 0-23, Day: 1-31, Month: 1-12, Weekday: 1-7 or ?
  2. Step 2: Identify invalid value

    Hour field is 25, which is outside 0-23 range, causing error.
  3. Final Answer:

    Hour value 25 is invalid -> Option C
  4. Quick Check:

    Hour must be 0-23, 25 is invalid [OK]
Hint: Hours max 23 in cron, check all field ranges [OK]
Common Mistakes:
  • Using hour > 23
  • Forgetting seconds field
  • Misusing '?' in day or weekday
5. You want to schedule a Spring Boot task to run every Monday at 8:30 AM, but only during the months of June, July, and August. Which cron expression correctly achieves this?
hard
A. "0 30 8 ? 6,7,8 MON"
B. "0 30 8 * 6-8 *"
C. "0 30 8 ? 5-8 MON"
D. "0 30 8 ? 6-8 1"

Solution

  1. Step 1: Understand cron fields needed

    Seconds=0, Minutes=30, Hours=8, Day=? (no specific day), Month=6,7,8 (June-Aug), Weekday=MON (Monday)
  2. Step 2: Check options for correct syntax

    "0 30 8 ? 6,7,8 MON" uses '?' for day, lists months as 6,7,8, and weekday as MON, which is correct.
  3. Final Answer:

    "0 30 8 ? 6,7,8 MON" -> Option A
  4. Quick Check:

    Use '?' for day, list months, specify MON weekday [OK]
Hint: Use '?' for day when specifying weekday, list months with commas [OK]
Common Mistakes:
  • Using '*' for day and weekday together
  • Using range '-' instead of commas for months
  • Using numeric weekday instead of MON
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