我通过向 POM.XML 添加依赖项来配置 Shedlock,如下所示:
<dependency>
<groupId>net.javacrumbs.shedlock</groupId>
<artifactId>shedlock-spring</artifactId>
<version>4.29.0</version>
</dependency>
<dependency>
<groupId>net.javacrumbs.shedlock</groupId>
<artifactId>shedlock-provider-jdbc-template</artifactId>
<version>4.29.0</version>
</dependency>
注册了bean:
@Bean
public LockProvider lockProvider(DataSource dataSource, JdbcTemplate jdbcTemplate) {
// @formatter:off
return new JdbcTemplateLockProvider(JdbcTemplateLockProvider.Configuration.builder()
.withTableName("scheduler_lock_vw")
.withJdbcTemplate(new JdbcTemplate(dataSource))
.usingDbTime()
.withLockedByValue("search-service")
.build());
// @formatter:on
}
添加调度程序:
@Component
@Slf4j
public class Scheduler {
@Scheduled(cron = "0 * * * * *")
@SchedulerLock(name = "elastic_reindex_scheduler", lockAtLeastFor = "PT30S", lockAtMostFor = "PT45S")
public void shortRunningTask() {
LockAssert.assertLocked();
log.info("Start short running task");
}
}
问题是我没有看到使用此名称“elastic_reindex_scheduler”插入表(“scheduler_lock_vw”)的记录。行 - “LockAssert.assertLocked();” 抛出错误“计划任务 java.lang.IllegalStateException 发生意外错误:任务未锁定。