Spring Boot 中的 @Schedule 不会在我们提供的日期运行

Posted

技术标签:

【中文标题】Spring Boot 中的 @Schedule 不会在我们提供的日期运行【英文标题】:@Schedule in spring boot will not run on dates which we provided 【发布时间】:2020-03-27 23:21:52 【问题描述】:
@Scheduled(cron="*/5 * * * * ?")
public void startQuery()
    try
      //some code
    catch(Exception e)

    

    如何将动态列表发送到@Schedule。 @Scheduled 将在我们提供的特定日期运行。 Spring Boot 中的 @Scheduled 不会在我们提供的日期运行。

在 cron 表达式中我想发送列表以及我想排除哪些日期。

【问题讨论】:

纯代码编写请求在 Stack Overflow 上是题外话——我们希望这里的问题与特定编程问题有关——但我们很乐意帮助您自己编写!告诉我们what you've tried,以及您遇到的问题。这也将有助于我们更好地回答您的问题。 cron 可以使用 SpEL 表达式从属性中获取某些内容。这不是完全动态的。如果您想要类似的东西,请使用 Quartz 而不是 @Scheduled 以获得更多控制权。或者通过自己向TaskScheduler 提交任务来手动进行调度。 【参考方案1】:

在@Scheduled 注释中,您不能使用动态值,但这不是问题,因为您有另一种方法,例如此代码示例:

ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.initialize();
loadCrons()

private void loadCrons() 
  String cron = <read your cron from somewhere>
  scheduler.schedule(new Runnable() 
     @Override
     public void run() 
        // do your stuff here
     
  , new CronTrigger(cron);

如果您的 crons 已更改并且您想重新加载它们,您必须这样做:

scheduler.shutdown();
scheduler.initialize();
loadCrons();

完成。

【讨论】:

以上是关于Spring Boot 中的 @Schedule 不会在我们提供的日期运行的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot使用Schedule实现定时任务

SpringBoot系列:Spring Boot定时任务Spring Schedule

spring boot项目中处理Schedule定时任务

java spring boot Schedule定时任务

5分钟搞懂如何在Spring Boot中Schedule Tasks

SpringBoot中的Schedule定时任务 #yyds干货盘点#