一,配置定时任务线程池
@Configuration
public class ScheduledConfig {
@Bean
public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(3);
threadPoolTaskScheduler.setRemoveOnCancelPolicy(true);
return threadPoolTaskScheduler;
}
}
二,定时任务存储类
/**
* 定时任务执行的包装类
*/
@Data
public class ScheduledFutureHolder {
private ScheduledFuture<?> scheduledFuture;
private String uuid;
private String corn;
}
三,定时任务容器,以及定时任务启动和取消
//定时任务容器
private Map<String, ScheduledFutureHolder> scheduleMap = new ConcurrentHashMap<>();
//引入定时任务线程池
private final ThreadPoolTaskScheduler threadPoolTaskScheduler;
//启动定时任务
ScheduledFuture<?> schedule = threadPoolTaskScheduler.schedule(new BackupTask(), new CronTrigger("cron表达式"));
//备份异步定时任务
class BackupTask implements Runnable {
@Override
public void run() {
// Task(one, backupParam);
System.out.println("测试+“-----------------------------------------”");
}
}
//停止定时任务
ScheduledFutureHolder scheduledFutureHolder = scheduleMap.get(backupConfigService.getOne(new LambdaQueryWrapper<BackupConfig>().eq(BackupConfig::getId, deleteBackupConfigParam.getId())).getScheduledStr());
ScheduledFuture<?> scheduledFuture = scheduledFutureHolder.getScheduledFuture();
//停止定时任务
boolean cancel = scheduledFuture.cancel(true);