Java Spring shedlock 失败

Java Spring shedlock fails

我有一个 spring-boot 应用程序,它在生产环境 运行s 中有 2 个实例,导致计划任务 运行ning 两次。为避免我正在尝试使用 shedlock,如 here and here 所述,但它没有任何影响。 我已经在使用 MySql 数据库,我在上面的两个示例中都添加了 shedlock table。

我的项目结构如下(部分)-

在我的 application.properties 文件中我有这个设置 -

db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/b4ad?autoReconnect=true&useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
db.username=*****
db.password=*****

AppConfig class 我添加了这个注释 -

@EnableSchedulerLock(defaultLockAtMostFor = "PT30S")

和这个豆子 -

@Bean
public LockProvider lockProvider(DataSource dataSource) {
    return new JdbcTemplateLockProvider(dataSource, "b4ad.shedlock");
}

并且在 ScheduledManager class 我有这个计划任务 -

 @Scheduled(cron = "0 0/1 * * * ?")
@SchedulerLock(name = "deactivateExpiredOrganizations", lockAtLeastFor = "PT5M")
public void deactivateExpiredOrganizations() {
    // my code...
}

当我 运行 我的应用程序在 2 个本地实例上(使用 application.properties 文件中的 2 个不同端口)时,查看日志我可以看到任务 运行s这两个实例,同时 shedlock table 仍然是空的。 根据 troubleshooting 部分中的第二项,似乎我配置有误,但我说不出是什么。

任何帮助将不胜感激。

好吧,显然在我的大项目中还有另一个配置 class(除了 AppConfig)- 一个名为 SqlSpringConfig,在 db 模块中。 一旦我把 LockProvider bean 放在那里,一切都很顺利