ShedLock:运行多个实例多次运行调度程序任务

问题描述:

如果多个服务实例正在运行,我正在使用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再次运行但是这两种情况下开始运行的任务。我错过了什么。实施过程中出了什么问题?有人可以提供任何想法。谢谢 !!

+0

我不知道Shedlock,所以这可能是一个愚蠢的问题,但是,你检查过,如果你的实例有不同的'locked_by'值吗? –

+0

@JeremyGrand实例完全相同。他们只在不同的端口上运行。 :/ – varunkr

+0

所以你不觉得他们都认为他们自己锁定了? –

两个实例都应该执行任务,但不能同时执行。请检查这个例子https://github.com/lukas-krecan/shedlock-example