参考:
通过配置来加入任务:
import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.config.CronTask; import org.springframework.scheduling.config.ScheduledTaskRegistrar; @Slf4j @Configuration @EnableScheduling public class SchedulingConfigurer implements org.springframework.scheduling.annotation.SchedulingConfigurer { @Bean public ThreadPoolTaskScheduler threadPoolTaskScheduler() { return new ThreadPoolTaskScheduler(); } @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { CronTask cronTask = new CronTask(() -> { }, "0/1 * * * * ?"); taskRegistrar.addCronTask(cronTask); } }
通过ThreadPoolTaskScheduler加入任务:
import cn.hutool.core.util.ObjectUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.config.CronTask; import org.springframework.stereotype.Service; import yhzh.meter.copy.common.task.McsCronTask; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ScheduledFuture; @Slf4j @Service public class MeterCopyTaskManager implements DisposableBean { private final ThreadPoolTaskScheduler threadPoolTaskScheduler; private final Map<String, ScheduledFuture<?>> scheduledFutureMap = new ConcurrentHashMap<>(16); @Autowired public MeterCopyTaskManager(ThreadPoolTaskScheduler threadPoolTaskScheduler) { this.threadPoolTaskScheduler = threadPoolTaskScheduler; } @Override public void destroy() { for (ScheduledFuture<?> scheduledFuture : this.scheduledFutureMap.values()) { scheduledFuture.cancel(true); } scheduledFutureMap.clear(); } /** * 启动定时任务 */ public void startTask(McsCronTask mcsCronTask) { CronTask cronTask = new CronTask(mcsCronTask, mcsCronTask.getCronExpression()); ScheduledFuture<?> scheduledFuture = threadPoolTaskScheduler.schedule(cronTask.getRunnable(), cronTask.getTrigger()); if (ObjectUtil.isNotNull(scheduledFuture)) { scheduledFutureMap.put(mcsCronTask.getObjectId(), scheduledFuture); } } /** * 停止定时任务 */ public void stopTask(String objectId) { ScheduledFuture<?> scheduledFuture = scheduledFutureMap.get(objectId); if (ObjectUtil.isNotNull(scheduledFuture)) { scheduledFuture.cancel(true); scheduledFutureMap.remove(objectId); } }
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END