前言
在我们的springboot项目中,有许多种实现定时使命的方式
有用最简单的
@Scheduled 实现定时使命,即:
- import org.springframework.scheduling.annotation.Scheduled;
- import org.springframework.stereotype.Component;
- @Component
- @EnableScheduling
- public class ScheduledTasks {
- // 固定延迟任务
- @Scheduled(fixedDelay = 5000)
- public void fixedDelayTask() {
- System.out.println("任务以固定的5秒延迟执行");
- }
- // 固定频率任务
- @Scheduled(fixedRate = 5000)
- public void fixedRateTask() {
- System.out.println("任务以固定的每5秒执行");
- }
- // Cron 表达式任务
- @Scheduled(cron = "0 0/5 * * * ?")
- public void cronTask() {
- System.out.println("任务以固定的每5分钟执行");
- }
- }
复制代码 使用TaskScheduler 动态创建使命
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.scheduling.TaskScheduler;
- import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
- @Configuration
- public class SchedulerConfig {
- @Bean
- public TaskScheduler taskScheduler() {
- ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
- scheduler.setPoolSize(10);
- scheduler.setThreadNamePrefix("scheduler-");
- return scheduler;
- }
- }
复制代码- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.scheduling.TaskScheduler;
- import org.springframework.stereotype.Component;
- import javax.annotation.PostConstruct;
- import java.util.concurrent.ScheduledFuture;
- @Component
- public class DynamicScheduledTask {
- @Autowired
- private TaskScheduler taskScheduler;
- private ScheduledFuture<?> scheduledFuture;
- @PostConstruct
- public void scheduleTask() {
- scheduledFuture = taskScheduler.schedule(this::task, new CronTrigger("0 0/5 * * * ?"));
- }
- public void task() {
- System.out.println("定时任务执行");
- }
- }
复制代码 除此外另有各种定时框架
Quartz
XXL-JOB
Elastic-Job
当然另有其他,但是本次将会着重讲解如何用Quartz定时框架和数据库来控制定时使命的执行与否以及执行时间长度
|