首页 > 解决方案 > 在 shedlock-spring 3.0 中使用什么来代替 ScheduledLockConfiguration Bean?

问题描述

我有一个 ScheduledLockConfiguration bean 配置。

@Bean
public ScheduledLockConfiguration taskScheduler(LockProvider lockProvider) {
    return ScheduledLockConfigurationBuilder
        .withLockProvider(lockProvider)
        .withPoolSize(5)
        .withDefaultLockAtMostFor(Duration.ofMinutes(5))
        .build();
}

刚升级到shedlock-spring 3.0,不知道用什么代替这个Bean?

标签: springscheduled-tasksschedulershedlock

解决方案


我们可以像下面这样配置。

@Component
class TaskScheduler {
    @Scheduled(cron = "0 0 10 * * ?")
    @SchedulerLock(name = "TaskScheduler_scheduledTask", lockAtLeastForString = "PT5M", lockAtMostForString = "PT14M")
        public void scheduledTask() {
            // ...
        }
    }

@Scheduled将支持玉米格式。

@SchedulerLock, name 参数必须是唯一的,ClassName_methodName通常足以实现这一点。我们不希望这种方法同时运行不止一次,而 ShedLock 使用唯一的名称来实现这一点。

首先,我们添加了lockAtLeastForString以便我们可以在方法调用之间留出一些距离。使用“PT5M”意味着此方法将至少保持锁定 5 分钟。换句话说,这意味着 ShedLock 可以不超过每五分钟运行一次此方法。

接下来,我们添加了lockAtMostForString来指定在执行节点死亡的情况下锁应该保持多长时间。使用“PT14M”意味着它将被锁定不超过14分钟。

一般情况下,ShedLock 在任务完成后直接释放锁。现在,真的,我们不必这样做,因为@EnableSchedulerLock 中提供了默认值,但我们选择在这里覆盖它。


推荐阅读