当前位置: 首页 > 知识库问答 >
问题:

Spring Boot@Scheduled Cron表达式在两个任务之间稍微延迟?

傅增
2023-03-14

我使用Spring-Boot@Scheduled-Cron缓存从持久性存储中检索到的数据。

我有两个不同的任务,

  • 在缓存中设置结果
  • 清除缓存

Task1将每15分钟运行一次。我设置了cron-like

@Scheduled(cron = "0 0/15 * * * *")

所以频率应该是

12: 00:00
12:15:00
12:30:00

现在,我想在Task1之前10秒运行Task2

ie

11: 59:50
12:14:50
12:29:50

我在尝试这个表达

@Scheduled(cron = "50 0/14 * * * *")

但每隔14分钟就会开火一次。

谁能给我建议一个解决方案吗?

共有3个答案

能向晨
2023-03-14

我建议您使用fixedRate或fixedDelay来代替cron表达式。您的需求不是很复杂,因此没有必要使用cron。

>

  • 固定延迟-具体控制最后一次执行完成时的下一次执行时间。

    固定速率-使Spring定期运行任务,即使最后一次调用可能仍在运行-不等待前一次执行的完成。

    使用示例:

    @Scheduled(fixedDelay = 900000) // 15 minutes
    public void taskOne() {
       ...
    }
    
    @Scheduled(fixedDelay = 890000) // 14 minutes 50 seconds
    public void taskTwo() {
       ...
    }
    

  • 公孙盛
    2023-03-14

    这将在Task1之前10秒运行您的Task2:

    @Scheduled(cron = "50 14/15 * * * *")
    

    例如,它将在11:59:50、12:14:50、12:29:50、12:44:50、12:59:50。。。

    廉博赡
    2023-03-14

    试用:

    @Scheduled(cron = "50 59/15 * * * *")
    

    说明:

    50 59/15 * * * * = at 50 seconds, every hour at 59 minute, every 15 minutes
    50 59/15 * * * * = starting at 11:59:50 for every 15 minutes.
    

    你的问题是,X的意思是“每X”。所以0/14意味着每14分钟。

    您可以在文档中阅读更多内容:

     类似资料:
    • 我有一个创建5个任务的循环。如何在每个任务之间插入5秒的延迟。我不知道如何适应这项任务。延迟(5000)在那里。 我的ProcessQueAsync方法调用一个服务器,检索数据并返回和int。

    • 大家好,我是微服务的架构新手,所以我有一个miscroservice,每个实体都链接到“用户”实体,但问题是“用户”实体在另一个微服务中,有什么解决方案吗? 如果我在同一个微服务中没有两个实体,我不知道在哪里使用@onetomany关系) 我无法将两个微服务组合在一起。 领域模型层呢?使用另一个微服务的数据是不是最好的解决方案? 提前感谢。

    • 我想调度多个任务使用@调度注释使用cron表达式。我有三项工作需要在固定时间执行。例如,作业-1被安排在每天晚上11点,作业-2被安排在每天早上7点到晚上9点,间隔1小时,作业-3被安排在每1小时。所有3个计划任务都是同一应用程序的一部分。 我也尝试过同样的方法,但所有三个调度都没有发生。我的应用程序是SpringBoot应用程序。我不是新的调度。请帮帮我。下面是他我的方法 application

    • 问题内容: 被分组的一头雾水。它有什么不同? 问题答案: 这里有两件事需要解释:量化组的行为和方法的设计。 在您的第一个示例中,匹配在组#1中捕获的。然后,它匹配并捕获到#1组中,从而覆盖。然后再次使用,这就是比赛结束时第一组的比赛。 但是它 确实 匹配整个字符串。如果您正在使用或者,你就可以看MatchObject,看到包含与包含。但是返回字符串,而不是MatchObjects。如果没有组,则返

    • 我正在尝试编写一个正则表达式,使其只有两个单词,它们之间只有一个空格。两个字都不能少于三个字符。例子:乔·史密斯

    • 好的正则表达式问题,如何提取不在两个字符之间的字符,在本例中为括号。 我有一个字符串,例如:word1 |{word2 | word3}| word 4 我只想得到第一个和最后一个“管道”,而不是括号内的第二个。我尝试了无数次负克拉和负分组的尝试,但似乎无法让它发挥作用。 基本上,我在JavaScript拆分函数中使用这个正则表达式将其拆分为一个数组,其中包含:“word1”、“{word2|wo