Я использую 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()));
}
Но в обоих 2 Экземпляр моего приложения, задача расписания выполняется, и эта информация отображается в БД
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
Почему возникает эта ошибка? Большое спасибо!