2017-08-08 102 views
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再次運行但是這兩種情況下開始運行的任務。我錯過了什麼。實施過程中出了什麼問題?有人可以提供任何想法。謝謝 !!

+0

我不知道Shedlock,所以這可能是一個愚蠢的問題,但是,你檢查過,如果你的實例有不同的'locked_by'值嗎? –

+0

@JeremyGrand實例完全相同。他們只在不同的端口上運行。 :/ – varunkr

+0

所以你不覺得他們都認爲他們自己鎖定了? –

回答