我通过将依赖项添加到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
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");
}
}
问题是I没有看到插入到表("scheduler_lock_vw")中的名为"elastic_reindex_scheduler“的记录。行- "LockAssert.assertLocked();“抛出一个错误”在计划任务java.lang.IllegalStateException中发生意外错误:任务没有锁定。
发布于 2022-07-20 16:04:46
我看不到您所有的代码,但是您是否在配置类中添加了@EnableSchedulerLock
注释?
例如,
@Configuration
@EnableSchedulerLock(defaultLockAtMostFor = "5m")
...
public class MyConfig {
...
}
https://stackoverflow.com/questions/70279939
复制相似问题