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 !!
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? –
@JeremyGrand Les instances sont toutes deux exactement les mêmes. Ils ne fonctionnent que sur des ports différents. :/ – varunkr
Donc, vous ne pensez pas qu'ils pourraient tous deux considérer qu'ils ont le verrou pour eux-mêmes? –