2017-08-08 4 views
1

J'utilise Shedlock pour exécuter ma tâche scheduler une seule fois si plusieurs instances du service sont en cours d'exécution. J'ai suivi le documentation et c'est ce que j'ai fait.ShedLock: Exécuter plusieurs instances exécute des tâches de planificateur plusieurs fois

C'est la fonction qui doit exécuter périodiquement

@Scheduled(fixedDelayString = "300000") 
@SchedulerLock(name = "onlineIngestionTask", lockAtMostFor = 240000, lockAtLeastFor = 240000) 
public void pullTasksFromRemote() { 
     //Code 
} 

Dans ma classe de config je les haricots suivants

@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); 
} 

Le pom comprend

<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> 

I ajouté une table à mon db, celui auquel jdbc se connecte.

CREATE TABLE shedlock(
    name VARCHAR(64), 
    lock_until TIMESTAMP(3) NULL, 
    locked_at TIMESTAMP(3) NULL, 
    locked_by VARCHAR(255), 
    PRIMARY KEY (name) 
) 

Après cela, j'essayé de tester la fonctionnalité en exécutant pp tha d'abord sur le port 8080. Puis-je utiliser server.port=9000 pour l'exécuter à nouveau sur le port 9000. Mais ces deux cas, commencer à exécuter la tâche. Est-ce que j'ai raté quelque chose? Quelque chose ne va pas dans la mise en œuvre? Quelqu'un peut-il donner des idées. Merci !!

+0

Je ne sais pas Shedlock, donc c'est peut-être une question stupide mais, avez-vous vérifié si vos instances ont une valeur 'locked_by' différente? –

+0

@JeremyGrand Les instances sont toutes deux exactement les mêmes. Ils ne fonctionnent que sur des ports différents. :/ – varunkr

+0

Donc, vous ne pensez pas qu'ils pourraient tous deux considérer qu'ils ont le verrou pour eux-mêmes? –

Répondre