八卦阵 发表于 2024-9-13 22:01:35

springboot+Quartz通过数据库控制定时使命执行与时间

前言

在我们的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定时框架和数据库来控制定时使命的执行与否以及执行时间长度
页: [1]
查看完整版本: springboot+Quartz通过数据库控制定时使命执行与时间