SoFunction
Updated on 2025-03-08

7 implementation solutions for the latest timing tasks in SpringBoot

In modern applications, timing tasks are a very common requirement, such as timed cleaning of expired data, timing reports, etc. This article will explain in 7 ways how to implement timing tasks in SpringBoot, helping developers choose suitable solutions based on the scenario.

1. Use the @Scheduled annotation to implement simple timing tasks

Spring provides @Scheduled annotation to quickly implement timing tasks. Just add the @EnableScheduling annotation to the startup class or configuration class.

Sample code

@EnableScheduling
@SpringBootApplication
public class ScheduledTaskApplication {

    public static void main(String[] args) {
        (, args);
    }

    @Component
    public static class SimpleTask {

        @Scheduled(cron = "0 0/1 * * * ?") // Execute once per minute        public void execute() {
            ("Simple timed task execution:" + ());
        }
    }
}

Advantages

  • Simple and easy to use
  • No additional dependencies required

limitation

  • Distributed task scheduling is not supported

2. Use ScheduledExecutorService to implement timing tasks

ScheduledExecutorService is a timed task tool built into Java, which can implement simple concurrent tasks.

Sample code

@Component
public class ExecutorServiceTask {

    private final ScheduledExecutorService executorService = (2);

    @PostConstruct
    public void init() {
        (() -> {
            ("ExecutorService task execution:" + ());
        }, 0, 1, );
    }
}

Advantages

  • Support concurrent execution

limitation

  • Dynamic configuration tasks are not supported

3. Use Quartz to implement complex scheduling tasks

Quartz is a powerful task scheduling framework that supports complex scheduling tasks.

Sample code

rely

<dependency>
    <groupId></groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

Configuration and Tasks

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetail jobDetail() {
        return ()
                .withIdentity("sampleJob")
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger trigger(JobDetail jobDetail) {
        return ()
                .forJob(jobDetail)
                .withSchedule(("0 0/1 * * * ?"))
                .build();
    }

    public static class SampleJob implements Job {
        @Override
        public void execute(JobExecutionContext context) {
            ("Quartz task execution:" + ());
        }
    }
}

Advantages

  • Supports distributed tasks
  • Powerful

limitation

  • Steep learning curve
  • Complex configuration

4. Use Spring TaskScheduler to implement timing tasks

Spring provides a TaskScheduler interface to support dynamic tasks.

Sample code

@Component
public class TaskSchedulerTask {

    @Autowired
    private TaskScheduler taskScheduler;

    @PostConstruct
    public void init() {
        (() -&gt; {
            ("TaskScheduler Task Execution:" + ());
        }, 60000);
    }
}

Advantages

  • Simple and flexible

limitation

  • No complex task scheduling is supported

5. Use Redis to implement distributed timing tasks

With the distributed features of Redis, simple distributed timing tasks can be implemented.

Sample code

@Component
public class RedisTask {

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Scheduled(cron = "0 0/1 * * * ?")
    public void execute() {
        String lockKey = "redis_task_lock";
        Boolean lock = ().setIfAbsent(lockKey, "lock", 60, );

        if ((lock)) {
            try {
                ("Redis distributed task execution:" + ());
            } finally {
                (lockKey);
            }
        }
    }
}

Advantages

  • Supports distributed environments

limitation

  • More complex implementation

6. Use XXL-JOB to implement distributed task scheduling

XXL-JOB is a lightweight distributed task scheduling platform.

Sample code

rely

<dependency>
    <groupId></groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.3.0</version>
</dependency>

Configuration and Tasks

@XxlJob("sampleJob")
public void sampleJobHandler() {
    ("XXL-JOB Task Execution:" + ());
}

Advantages

  • Strong distributed scheduling capabilities
  • Provide management interface

7. Use the open source framework Elastic-Job to implement dynamic tasks

Elastic-Job is a distributed task scheduling framework that supports dynamic task management.

Sample code

rely

<dependency>
    <groupId>-lite</groupId>
    <artifactId>elasticjob-lite-spring-boot-starter</artifactId>
    <version>3.0.1</version>
</dependency>

Configuration and Tasks

@ElasticJobConfiguration(
    cron = "0 0/1 * * * ?",
    jobName = "elasticJobSample",
    shardingTotalCount = 1
)
public class ElasticJobTask implements SimpleJob {

    @Override
    public void execute(ShardingContext shardingContext) {
        ("Elastic-Job Task Execution:" + ());
    }
}

Advantages

  • Supports distributed tasks
  • Highly flexible

Summarize

There are many ways to implement timing tasks in SpringBoot, and you can choose according to actual needs:

  • Simple tasks: @Scheduled and ScheduledExecutorService
  • Distributed tasks: XXL-JOB and Elastic-Job
  • Complex tasks: Quartz
  • Dynamic Tasks: TaskScheduler and Redis

By rationally selecting and combining these tools, a timed task system with superior performance and rich functions can be built.

This is the article about 7 implementation solutions for SpringBoot's latest timing tasks. For more related contents of 7 timing tasks in SpringBoot, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!