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]