ScheduledFutureUtil.java 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package com.ydtech.utils.scheduledFutureUtil;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
  5. import org.springframework.scheduling.support.CronTrigger;
  6. import org.springframework.stereotype.Component;
  7. import java.util.HashMap;
  8. import java.util.concurrent.ScheduledFuture;
  9. @Slf4j
  10. @Component
  11. public class ScheduledFutureUtil {
  12. //存储任务执行的包装类
  13. public static HashMap<String, ScheduledFutureHolder> scheduleMap = new HashMap<>();
  14. @Autowired
  15. private ThreadPoolTaskScheduler threadPoolTaskScheduler;
  16. public void startJob(Runnable runnable, String cron) {
  17. //将任务交给任务调度器执行
  18. ScheduledFuture<?> schedule = threadPoolTaskScheduler.schedule(runnable, new CronTrigger(cron));
  19. //将任务包装成ScheduledFutureHolder
  20. ScheduledFutureHolder scheduledFutureHolder = new ScheduledFutureHolder();
  21. scheduledFutureHolder.setScheduledFuture(schedule);
  22. scheduledFutureHolder.setRunnableClass(runnable.getClass());
  23. scheduledFutureHolder.setCorn(cron);
  24. scheduleMap.put(scheduledFutureHolder.getRunnableClass().getName(), scheduledFutureHolder);
  25. }
  26. public void endJob(String className){
  27. if(ScheduledFutureUtil.scheduleMap.containsKey(className)){//如果包含这个任务
  28. ScheduledFuture<?> scheduledFuture = ScheduledFutureUtil.scheduleMap.get(className).getScheduledFuture();
  29. if(scheduledFuture!=null){
  30. scheduledFuture.cancel(true);
  31. log.info("{}任务已停止",className);
  32. }
  33. }
  34. }
  35. }