首页 > 解决方案 > java - 如何在spring java中动态调度任务

问题描述

我想动态安排任务,例如我有任务 A、B、C。我想在上午 9 点执行任务“A”,在下午 12.30 执行任务“B”,在晚上 7 点执行任务“C”。但我不想每天在同一时间重复任务。我想动态设置任务计划。我用谷歌搜索了很多,我发现只有静态任务调度程序。在spring java中,我只有像@Scheduled(cron = "0 15 10 15 * ?") 这样的固定和cron表达式,它是完全静态的,对于cron表达式,您可以在一天的固定时间运行任务。所以请帮助我。

标签: javaspring

解决方案


我认为您正在寻找这个(来自官方文档):

Spring TaskScheduler 抽象

除了TaskExecutor抽象之外,Spring 3.0 还引入了 TaskScheduler一种用于调度任务以在未来某个时间点运行的多种方法。以下清单显示了 TaskScheduler接口定义:

public interface TaskScheduler {

    ScheduledFuture schedule(Runnable task, Trigger trigger);

    ScheduledFuture schedule(Runnable task, Instant startTime);

    ScheduledFuture schedule(Runnable task, Date startTime);

    ScheduledFuture scheduleAtFixedRate(Runnable task, Instant startTime, Duration period);

    ScheduledFuture scheduleAtFixedRate(Runnable task, Date startTime, long period);

    ScheduledFuture scheduleAtFixedRate(Runnable task, Duration period);

    ScheduledFuture scheduleAtFixedRate(Runnable task, long period);

    ScheduledFuture scheduleWithFixedDelay(Runnable task, Instant startTime, Duration delay);

    ScheduledFuture scheduleWithFixedDelay(Runnable task, Date startTime, long delay);

    ScheduledFuture scheduleWithFixedDelay(Runnable task, Duration delay);

    ScheduledFuture scheduleWithFixedDelay(Runnable task, long delay);
}

TaskScheduler可以在指定的时间安排任务DateInstant

ScheduledFuture schedule(Runnable task, Instant startTime);

ScheduledFuture schedule(Runnable task, Date startTime);

所以你应该能够做到:

scheduler.schedule(task, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format("2018-11-07 17:46:00"));

推荐阅读