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
所以你不觉得他们都认为他们自己锁定了? –