[英]Java Spring shedlock fails
我有一個 spring-boot 應用程序,它在生產環境中運行 2 個實例,導致計划任務運行兩次。 為避免我嘗試使用 shedlock,如此處和此處所述,但它沒有影響。 我已經在使用 MySql db,我添加了一個shedlock
表,如上面兩個示例中所述。
我的項目結構如下(部分) -
在我的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
類我添加了這個注釋 -
@EnableSchedulerLock(defaultLockAtMostFor = "PT30S")
還有這個豆子——
@Bean
public LockProvider lockProvider(DataSource dataSource) {
return new JdbcTemplateLockProvider(dataSource, "b4ad.shedlock");
}
在ScheduledManager
類中,我有這個計划任務 -
@Scheduled(cron = "0 0/1 * * * ?")
@SchedulerLock(name = "deactivateExpiredOrganizations", lockAtLeastFor = "PT5M")
public void deactivateExpiredOrganizations() {
// my code...
}
當我在 2 個實例上本地運行我的應用程序(使用application.properties
文件中的 2 個不同端口)時,查看日志我可以看到任務在兩個實例上運行,同時shedlock
表保持為空。 根據故障排除部分的第二項,我似乎配置錯誤,但我不知道是什么。
任何幫助將不勝感激。
好吧,顯然在我的大項目中有另一個配置類(除了AppConfig
) - 一個叫做SqlSpringConfig
,在 db 模塊內。 一旦我把LockProvider
bean 放在那里,一切都像魅力一樣
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.