1
如果多個服務實例正在運行,我正在使用Shedlock
來運行我的scheduler
任務。ShedLock:運行多個實例多次運行調度程序任務
我跟着documentation這就是我所做的。
這是需要定期
@Scheduled(fixedDelayString = "300000")
@SchedulerLock(name = "onlineIngestionTask", lockAtMostFor = 240000, lockAtLeastFor = 240000)
public void pullTasksFromRemote() {
//Code
}
運行在我的配置類,我有以下豆
@Bean
public ScheduledLockConfiguration taskScheduler(LockProvider lockProvider) {
return ScheduledLockConfigurationBuilder
.withLockProvider(lockProvider)
.withPoolSize(10)
.withDefaultLockAtMostFor(Duration.ofMinutes(10))
.build();
}
@Bean
public LockProvider lockProvider(DataSource dataSource) {
return new JdbcTemplateLockProvider(dataSource);
}
聚甲醛包括
<dependency>
<groupId>net.javacrumbs.shedlock</groupId>
<artifactId>shedlock-spring</artifactId>
<version>0.14.0</version>
</dependency>
<dependency>
<groupId>net.javacrumbs.shedlock</groupId>
<artifactId>shedlock-provider-jdbc-template</artifactId>
<version>0.14.0</version>
</dependency>
我添加了一個表的功能到我的db,jdbc連接的那個。
CREATE TABLE shedlock(
name VARCHAR(64),
lock_until TIMESTAMP(3) NULL,
locked_at TIMESTAMP(3) NULL,
locked_by VARCHAR(255),
PRIMARY KEY (name)
)
在此之後我試圖測試運行THA頁的功能首先在端口8080上。然後我用server.port=9000
在端口9000再次運行但是這兩種情況下開始運行的任務。我錯過了什麼。實施過程中出了什麼問題?有人可以提供任何想法。謝謝 !!
我不知道Shedlock,所以這可能是一個愚蠢的問題,但是,你檢查過,如果你的實例有不同的'locked_by'值嗎? –
@JeremyGrand實例完全相同。他們只在不同的端口上運行。 :/ – varunkr
所以你不覺得他們都認爲他們自己鎖定了? –