- 实现SchedulingConfigurer接口
提前注入TaskScheduler
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setPoolSize(128);
scheduler.setThreadNamePrefix("TaskScheduler-");
scheduler.setRemoveOnCancelPolicy(true);
scheduler.setErrorHandler((throwable) -> {
logger.error("worker task throw exception msg is {}, case is {}", throwable.getMessage(), throwable.getCause());
});
return scheduler;
}
** this指代的是实现Runable或者继承Thread的类中的run方法,**
public class ActivityDataWorker implement SchedulingConfigurer extends Thread{
private final Logger logger = LoggerFactory.getLogger(ActivityDataWorker.class);
private static final String ACTUAL_DEFAULT_CRON = "0/50 * * * * ?";
private ScheduledFuture<?> actualDataFuture;
// 提前注入交由spring管理
private final TaskScheduler actualDataSchedule;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(actualDataSchedule);
// this指代的是实现Runable或者继承Thread的类中的run方法,
actualDataFuture = actualDataSchedule.schedule(this, new CronTrigger(ACTUAL_DEFAULT_CRON));
}
@Override
public void run() {
logger.info("测试");
}
}
- 以上部署好第一次定时任务后重新设置只需将
actualDataFuture.cancel(true);
taskScheduler.schedule(thread,new CronTrigger(cron))