Quarkus中替代Spring @Scheduled(fixedDelay=10000)的实现方案
在Quarkus中实现固定延迟调度器的方案
你遇到的问题是因为Quarkus对Spring @Scheduled注解的支持有限,不兼容fixedDelay属性。要实现固定延迟(上一次任务执行结束后延迟指定时间再启动下一次),可以使用Quarkus原生的调度API:
方法一:使用Quarkus原生@Scheduled注解
- 导入正确的包:
import io.quarkus.scheduler.Scheduled;
- 在任务方法上添加注解,利用
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
相关产品推荐
相关产品推荐

