Enjoying the Spring Tutorial?
Subscribe to Ram N Java for clean, hands-on Java & Spring guides!
SUBSCRIBE NOW1. Introduction to Spring Task Scheduler with Cron Expression
Spring provides built-in task scheduling support via the task namespace, allowing you to trigger background tasks without external third-party libraries. When you need complex scheduling conditions—such as running a job at specific seconds, minutes, hours, or days—cron expressions offer the ultimate flexibility.
In this tutorial, you will discover how to configure a Spring task:scheduler and execute bean methods using XML-based cron triggers.
2. Creating the Service Component
First, define a simple Spring bean that contains the task method you want to execute periodically:
@Component("reportCurrentTime")
public class ReportCurrentTime {
public void printCurrentTime() {
System.out.println("Cron Task Executed at: " + new Date());
}
}
3. Configuring Spring XML with the Task Namespace
To configure scheduling, declare the task schema in your XML configuration and set up task:scheduler alongside task:scheduled-tasks:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">
<context:component-scan base-package="com.ram.scheduler" />
<!-- Define Task Scheduler Pool Size -->
<task:scheduler id="myScheduler" pool-size="5" />
<!-- Configure Scheduled Tasks using Cron Expression -->
<task:scheduled-tasks scheduler="myScheduler">
<task:scheduled ref="reportCurrentTime"
method="printCurrentTime"
cron="0/5 * * * * ?" />
</task:scheduled-tasks>
</beans>
4. Understanding the Cron Expression Syntax
Spring's cron expression consists of 6 fields:
- second: 0-59 (e.g.,
0/5fires every 5 seconds) - minute: 0-59
- hour: 0-23
- day of month: 1-31
- month: 1-12 or JAN-DEC
- day of week: 1-7 or SUN-SAT (
?indicates no specific value)
5. Running and Verifying the Setup
Bootstrap your application by loading the Spring XML context with ClassPathXmlApplicationContext. The configured scheduler thread pool automatically schedules your target method according to the specified cron expression.
Related Video Tutorials
Click here to watch on Youtube:
https://www.youtube.com/watch?v=UHKr6O1WBQc&list=UUhwKlOVR041tngjerWxVccw
Click the below Image to Enlarge:
| Spring Job Scheduling using Task Scheduler - Cron expression (XML Config) | Spring tutorial |
| Spring Job Scheduling using Task Scheduler - Cron expression (XML Config) | Spring tutorial |
| Spring Job Scheduling using Task Scheduler - Cron expression (XML Config) | Spring tutorial |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ram.core</groupId>
<artifactId>SpringDemo</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>SpringDemo</name>
<url>http://maven.apache.org</url>
<properties>
<spring.version>5.0.9.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- Spring 5 dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</project>
ScheduledTasks.java
import java.text.SimpleDateFormat;
import java.util.Date;
public class ScheduledTasks
{
private static final SimpleDateFormat dateFormat = new SimpleDateFormat(
"HH:mm:ss");
public void reportCurrentTime()
{
System.out.println(
"Current time = " + dateFormat.format(new Date()));
}
}
Spring-Scheduler.xml
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd">
<bean id="scheduledTasks" class="com.ram.scheduler.ScheduledTasks" />
<!-- Configure the scheduler -->
<task:scheduler id="myScheduler" pool-size="10" />
<!-- Configure parameters -->
<task:scheduled-tasks scheduler="myScheduler">
<task:scheduled ref="scheduledTasks" method="reportCurrentTime"
cron="*/10 * * * * MON-FRI" />
</task:scheduled-tasks>
</beans>
App.java
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App
{
public static void main(String[] args)
{
ApplicationContext context = new ClassPathXmlApplicationContext(
"Spring-Scheduler.xml");
}
}
Output
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@4783da3f: startup date [Tue Dec 04 09:16:37 IST 2018]; root of context hierarchy
Dec 04, 2018 9:16:37 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [Spring-Scheduler.xml]
Dec 04, 2018 9:16:38 AM org.springframework.scheduling.concurrent.ExecutorConfigurationSupport initialize
INFO: Initializing ExecutorService 'myScheduler'
Current time = 09:16:40
Current time = 09:16:50
Current time = 09:17:00
Current time = 09:17:10
Refer:
https://www.freeformatter.com/cron-expression-generator-quartz.html
Click the below link to download the code:
https://sites.google.com/site/ramj2eev2/java_basics/SpringDemo_Schedule_CRON_XML.zip?attredirects=0&d=1
Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_Schedule_CRON_XML
Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/0989e369f77ed192b0b224588ebfcdeb2019a6a2/Spring_2018/SpringDemo_Schedule_CRON_XML/?at=master
See also: