当我有多个实例时,我正在使用 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
为什么会出现这个错误?多谢!