You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus中替代Spring @Scheduled(fixedDelay=10000)的实现方案

在Quarkus中实现固定延迟调度器的方案

你遇到的问题是因为Quarkus对Spring @Scheduled注解的支持有限,不兼容fixedDelay属性。要实现固定延迟(上一次任务执行结束后延迟指定时间再启动下一次),可以使用Quarkus原生的调度API:

方法一:使用Quarkus原生@Scheduled注解

  1. 导入正确的包:
import io.quarkus.scheduler.Scheduled;
  1. 在任务方法上添加注解,利用delay属性实现固定延迟:
@Scheduled(delay = 10000, concurrentExecution = Scheduled.ConcurrentExecution.SKIP)
public void monitorRoutesProcessing() {
    // 你的任务执行逻辑
}
  • delay = 10000:表示上一次任务执行完成后,等待10秒再启动下一次任务,完全对应你需要的固定延迟语义。
  • concurrentExecution = Scheduled.ConcurrentExecution.SKIP:确保如果上一次任务未完成,不会触发新的任务(符合固定延迟的执行逻辑,避免并发执行)。

方法二:编程式调度(适合动态配置场景)

如果需要动态调整调度参数,可以直接注入Scheduler bean来创建任务:

import io.quarkus.scheduler.Scheduler;
import io.quarkus.scheduler.Scheduled;
import io.quarkus.scheduler.Task;
import java.time.Duration;
import jakarta.inject.Inject;

// 在你的Bean类中
@Inject
Scheduler scheduler;

public void initScheduler() {
    scheduler.newJob("monitor-routes-processing-job")
            .setTask(Task.of(Runnable::run, this::monitorRoutesProcessing))
            .setDelay(Duration.ofSeconds(10))
            .setConcurrentExecution(Scheduled.ConcurrentExecution.SKIP)
            .schedule();
}

private void monitorRoutesProcessing() {
    // 你的任务执行逻辑
}

内容的提问来源于stack exchange,提问作者ank007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 06:15:13