使用场景

用户自定义的定时任务 需要我们通过接口调用改变 添加 删除 定时任务

配置线程池任务调度器

动态定时任务_开发语言

//定时任务线程池
@Bean
public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(5);
return taskScheduler;
}

创建一个线程类

@Slf4j
public class job01 implements Runnable{

private String cron;

public job01(String cron) {
this.cron = cron;
}

@Override
public void run() {
//
log.info("定时为"+cron+"启动的所有设备开始启动");
log.info("job01.run linenum:9, param:{} info:job01定时任务执行");
}
}

测试类

@Slf4j
@RestController
public class TsetJobApi {
@Autowired
ThreadPoolTaskScheduler conf;

private final Map<String, ScheduledFuture> scheduledFutures = new ConcurrentHashMap<>();

@GetMapping("/starjob")
public void starjob(@RequestParam String corn ,@RequestParam String euqid) {
//查询数据库 type cron 是否存在数据
//如果存在 直接在表中添加对照表中添加 cron equid
//如果不存在 添加新增一个定时任务
if(scheduledFutures.containsKey(corn)){
//如果存在改定时任务
log.info("查询cron表 存在类型为启动的cron");
log.info("查询starcroninfo表 存在euqid 不进行任何操作");
log.info("查询starcroninfo表 不存在euqid 插入数据");
}else {
log.info("查询cron表 不存在类型为启动的cron");
log.info("cron表 插入数据cron type=启动");
log.info("starcroninfo表 插入数据 cron equid");
scheduledFutures.put(corn,conf.schedule(new job01(corn), new CronTrigger(corn)));
log.info("开启定时任务 存入map");
}
//if (null != future) {
// //取消此任务
// future.cancel(true);
//}
//scheduledFutures.put(corn,future);
//future=conf.schedule(new job01(corn), new CronTrigger(corn));
}
}

接口调用

http://****/starjob?corn=0/3 * * * * ?&euqid=1