package com.ydtech.utils.scheduledFutureUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.concurrent.ScheduledFuture; @Slf4j @Component public class ScheduledFutureUtil { //存储任务执行的包装类 public static HashMap scheduleMap = new HashMap<>(); @Autowired private ThreadPoolTaskScheduler threadPoolTaskScheduler; public void startJob(Runnable runnable, String cron) { //将任务交给任务调度器执行 ScheduledFuture schedule = threadPoolTaskScheduler.schedule(runnable, new CronTrigger(cron)); //将任务包装成ScheduledFutureHolder ScheduledFutureHolder scheduledFutureHolder = new ScheduledFutureHolder(); scheduledFutureHolder.setScheduledFuture(schedule); scheduledFutureHolder.setRunnableClass(runnable.getClass()); scheduledFutureHolder.setCorn(cron); scheduleMap.put(scheduledFutureHolder.getRunnableClass().getName(), scheduledFutureHolder); } public void endJob(String className){ if(ScheduledFutureUtil.scheduleMap.containsKey(className)){//如果包含这个任务 ScheduledFuture scheduledFuture = ScheduledFutureUtil.scheduleMap.get(className).getScheduledFuture(); if(scheduledFuture!=null){ scheduledFuture.cancel(true); log.info("{}任务已停止",className); } } } }