1

当我有多个实例时,我正在使用 shedlock 确保只有 1 个计划任务可以同时运行

<dependency>
        <groupId>net.javacrumbs.shedlock</groupId>
        <artifactId>shedlock-spring</artifactId>
        <version>4.5.2</version>
    </dependency>
    <dependency>
        <groupId>net.javacrumbs.shedlock</groupId>
        <artifactId>shedlock-provider-jdbc-template</artifactId>
        <version>4.6.0</version>
    </dependency>

@Configuration
@EnableScheduling
@EnableSchedulerLock(
defaultLockAtMostFor = "${scheduled.task.lock.at.most}", 
defaultLockAtLeastFor = "${scheduled.task.lock.at.least}")
public class SchedulerConfig implements AsyncConfigurer, SchedulingConfigurer {

@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
    // TODO Auto-generated method stub
    TaskScheduler scheduler = this.taskScheduler();
    taskRegistrar.setTaskScheduler(scheduler);
}

@Override
public Executor getAsyncExecutor() {
    Executor executor = this.taskScheduler();
    return executor;
}

// shedlock config
@Bean
public LockProvider lockProvider(DataSource dataSource) {
    return new JdbcTemplateLockProvider(dataSource);
}  
}

这是我的任务

@Scheduled(cron = "0 36 16 * * ?") //
 @net.javacrumbs.shedlock.spring.annotation.SchedulerLock(name = "ms.template.scheduleTaskJob2")
public void scheduleTaskJob2() {
    // Mandatory information for logging
    String _id = "schedule-" + UUID.randomUUID().toString();
    ThreadContext.put("serviceMessageId", _id);

    logger.info("Cron Expression task called at the 0 second every minutes Execution Time - {}",
            dateTimeFormatter.format(LocalDateTime.now()));
}

但是在我的应用程序的两个实例中,计划任务都已执行,并且此信息显示在数据库中

ms.template.scheduleTaskJob2    26-MAR-20 04.51.00.001824000 PM 26-MAR-20 04.36.00.392858000 PM MB0001-PCHOBW41
ms.template.scheduleTaskJob2    26-MAR-20 04.51.00.004479000 PM 26-MAR-20 04.36.00.298564000 PM MB0001-PCHOBT97

为什么会出现这个错误?多谢!

4

2 回答 2

1

对不起我的不好。创建 Shedlock 表时我错过了主键。

于 2020-03-28T10:02:38.050 回答
0

请查阅故障排除部分https://github.com/lukas-krecan/ShedLock#troubleshooting

于 2020-03-27T09:01:04.947 回答