spring动态加载时间表达式并生成定时任务

本文介绍了一个用于动态生成定时调度任务的管理类ScheduledTaskManager及其实现细节,包括如何添加和移除任务调度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定时调度管理类:

@Component
public class ScheduledTaskManager {


    Logger logger = LoggerFactory.getLogger(getClass());

    private static Map<String, ScheduledFuture<?>> scheduleFutureMap = ScheduledProcessPool.INSTANCE.getPool();

    @Autowired
    private ThreadPoolTaskScheduler threadPoolTaskScheduler;

    @Autowired
    private FuturesOrderService futuresOrderService;

    private ScheduledFuture<?> schedule;

    @Bean
    public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
        return new ThreadPoolTaskScheduler();
    }


    /**
     * 描述:新增任务调度
     *
     * @param key         定时任务key
     * @param cron        时间表达式
     */
    public void addScheduled(String key, String cron) {

        //移除key的任务调度
        removeScheduled(key);
        //新增任务调度
        schedule = threadPoolTaskScheduler.schedule(() -> {
            //此处进行定时调度的业务操作
            
        }, new CronTrigger(cron));

        if (schedule != null) {
            scheduleFutureMap.put(key, schedule);
        }

    }

    /**
     * 描述:移除任务调度
     *
     * @param key 定时任务key
     */
    public void removeScheduled(String key) {

        //先取消任务调度
        ScheduledFuture<?> future = scheduleFutureMap.get(key);
        if (future != null && !future.isDone()) {
            future.cancel(true);
        }
        //并将任务调度从map中移除
        if (scheduleFutureMap.containsKey(key)) {
            Iterator<String> it = scheduleFutureMap.keySet().iterator();
            while (it.hasNext()) {
                if (it.next().equals(key)) {
                    it.remove();
                    break;
                }
            }
        }
    }

}

定时调度池:

public enum ScheduledProcessPool {

    INSTANCE;

    private Map<String, ScheduledFuture<?>> scheduledPool;

    /**
     * 调度池初始容量
     */
    private int initialCapacity = 50;

    private ScheduledProcessPool() {
        scheduledPool = new ConcurrentHashMap<String, ScheduledFuture<?>>(initialCapacity);
    }

    /**
     * Description: 获取任务调度池
     */
    public Map<String, ScheduledFuture<?>> getPool() {
        return scheduledPool;
    }

}

在需要动态生成定时调度任务的代码中,注入定时调度管理类,并调用其addScheduled()方法,传入调度池的key与定时调度时间表达式cron即可
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值