📖 Scenario: You are building a simple Spring Boot application that needs to perform a task repeatedly at fixed intervals. For example, sending a reminder message every 10 seconds.
🎯 Goal: Create a Spring Boot component that uses the @Scheduled annotation to run a method every 10 seconds.
📋 What You'll Learn
Create a Spring Boot component class named ReminderService
Add a method named sendReminder inside ReminderService
Configure the method sendReminder to run every 10 seconds using @Scheduled
Enable scheduling in the Spring Boot application
💡 Why This Matters
🌍 Real World
Scheduled tasks are used in many applications to perform regular maintenance, send notifications, or update data automatically without user intervention.
💼 Career
Understanding how to use @Scheduled in Spring Boot is important for backend developers who build reliable and automated services.
Progress0 / 4 steps
1
Create the ReminderService component
Create a Spring component class named ReminderService with an empty method called sendReminder.
Spring Boot
Hint
Use @Component to make the class a Spring bean.
2
Enable scheduling in the application
Add the @EnableScheduling annotation to your main Spring Boot application class to activate scheduled tasks.
Spring Boot
Hint
Put @EnableScheduling above your main application class.
3
Add the @Scheduled annotation to the method
Add the @Scheduled(fixedRate = 10000) annotation to the sendReminder method to run it every 10 seconds.
Spring Boot
Hint
Use @Scheduled(fixedRate = 10000) to run the method every 10 seconds.
4
Add a simple print statement inside the scheduled method
Inside the sendReminder method, add System.out.println("Reminder: Time to take a break!"); to show a message each time the method runs.
Spring Boot
Hint
Use System.out.println inside the method to print the reminder message.
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
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.
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.
Final Answer:
To run a method automatically at fixed intervals or times -> Option A
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
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.
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.
Final Answer:
@Scheduled(fixedRate = 5000) -> Option D
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
Step 1: Understand fixedDelay behavior
fixedDelay = 3000 means the method runs, then waits 3 seconds after it finishes before running again.
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.
Final Answer:
"Hello World" prints every 3 seconds after method finishes -> Option C
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
Step 1: Check fixedRate attribute type
The fixedRate attribute expects a long number (milliseconds), not a string. Using quotes causes a syntax error.
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.
Final Answer:
fixedRate value should be a number, not a string -> Option A
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
Step 1: Understand cron format in Spring
Spring cron has 6 fields: second, minute, hour, day of month, month, day of week.
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.
Final Answer:
@Scheduled(cron = "0 30 8 ? * MON") -> Option B
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 unknownstrongwhile earning +1 Grip toward your certificate.