java - java - 如何在spring java中动态调度任务
问题描述
我想动态安排任务,例如我有任务 A、B、C。我想在上午 9 点执行任务“A”,在下午 12.30 执行任务“B”,在晚上 7 点执行任务“C”。但我不想每天在同一时间重复任务。我想动态设置任务计划。我用谷歌搜索了很多,我发现只有静态任务调度程序。在spring java中,我只有像@Scheduled(cron = "0 15 10 15 * ?") 这样的固定和cron表达式,它是完全静态的,对于cron表达式,您可以在一天的固定时间运行任务。所以请帮助我。
解决方案
我认为您正在寻找这个(来自官方文档):
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
可以在指定的时间安排任务Date
或Instant
:
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"));
推荐阅读
- r - 列出 R 函数输出的一些 data.frames
- javascript - 有没有办法在 css 网格中选择项目,例如“grid-columns”并使用 javascript DOM 更改样式?
- r - 如何修复 r 中的“在标准或给定位置中找不到 libproj”错误
- selenium-webdriver - 将应用程序作为 TestNG 测试运行时测试用例中断
- selenium - 如何使用 Selenium webdriver 进行 Web 应用程序演示?
- javascript - ReactJS:组件数组问题
- angular - 为什么我在 NgOnInit 中的服务在按钮单击时不断被应用程序调用?
- machine-learning - 每个标签的 get_feature_names
- google-app-maker - 如何将元标记添加到 AppMaker 头部
- typescript - 如何使打字稿编译器打印正在编译的文件名列表?