Java Spring Boot@Scheduled Cron表达式在两个任务之间产生轻微延迟?

Java Spring Boot@Scheduled Cron表达式在两个任务之间产生轻微延迟?,java,spring-boot,cron,annotations,quartz-scheduler,Java,Spring Boot,Cron,Annotations,Quartz Scheduler,我使用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 即 11:59:50 12:14:50 12:29:50 我在尝试这个表达 @Scheduled(cron =

我使用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

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

我在尝试这个表达

@Scheduled(cron = "50 0/14 * * * *")
但它每隔14分钟发射一次

有人能给我一个解决方案吗?

我建议您使用fixedRate或fixedDelay而不是cron表达式。您的需求不是很复杂,所以使用cron没有意义

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

固定速率-使Spring以周期性的间隔运行任务,即使最后一次调用可能仍在运行-不等待 完成上一次执行

使用示例:

@Scheduled(fixedDelay = 900000) // 15 minutes
public void taskOne() {
   ...
}

@Scheduled(fixedDelay = 890000) // 14 minutes 50 seconds
public void taskTwo() {
   ...
}
尝试:

@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分钟一次


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

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

例如,它将在11:59:50、12:14:50、12:29:50、12:44:50、12:59:50运行…

您应该阅读并停止使用一些奇怪的预定缓存Thank@patrick。暂时我通过添加@Scheduledcron=5014,29,44,59****来修复它。它现在正在工作。我也试试你的。我试过这个方法。我在我的项目中使用微服务体系结构。如果在不同的时间启动多个服务实例@ScheduledfixedDelay=900000将不会在所有服务中同步工作,。这就是我改用cron的原因。