diff --git a/pom.xml b/pom.xml index b5c8cff4b90c9fc426d32fbe0020947e6322309e..c9bdd1c0cac2574704922de589df059f04492dab 100644 --- a/pom.xml +++ b/pom.xml @@ -27,6 +27,7 @@ <lombok-mapstruct-binding.version>0.2.0</lombok-mapstruct-binding.version> <mapstruct-processor.version>${mapstruct.version}</mapstruct-processor.version> <zufi-manager.version>1.5.0-SNAPSHOT</zufi-manager.version> + <shedlock.version>5.16.0</shedlock.version> </properties> <dependencies> @@ -85,6 +86,18 @@ <artifactId>grpc-client-spring-boot-starter</artifactId> </dependency> + <!-- ShedLock --> + <dependency> + <groupId>net.javacrumbs.shedlock</groupId> + <artifactId>shedlock-spring</artifactId> + <version>${shedlock.version}</version> + </dependency> + <dependency> + <groupId>net.javacrumbs.shedlock</groupId> + <artifactId>shedlock-provider-mongo</artifactId> + <version>${shedlock.version}</version> + </dependency> + <!-- Keycloak --> <dependency> <groupId>org.keycloak</groupId> diff --git a/src/main/java/de/ozgcloud/admin/SchedulingConfiguration.java b/src/main/java/de/ozgcloud/admin/SchedulingConfiguration.java index 3c9fdbd2e70d4ad7d3cf6c6fe2554d4db8065561..012b8680f0fe768a7def4303e525d33b308c07f9 100644 --- a/src/main/java/de/ozgcloud/admin/SchedulingConfiguration.java +++ b/src/main/java/de/ozgcloud/admin/SchedulingConfiguration.java @@ -1,10 +1,27 @@ package de.ozgcloud.admin; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; +import com.mongodb.client.MongoClient; + +import net.javacrumbs.shedlock.core.LockProvider; +import net.javacrumbs.shedlock.provider.mongo.MongoLockProvider; +import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock; + @Configuration @EnableScheduling +@EnableSchedulerLock(defaultLockAtMostFor = "PT23H") public class SchedulingConfiguration { + @Value("${spring.data.mongodb.database}") + private String database; + + @Bean + LockProvider lockProvider(MongoClient mongoClient) { + return new MongoLockProvider(mongoClient.getDatabase(database)); + } + } diff --git a/src/main/java/de/ozgcloud/admin/organisationseinheit/SyncScheduler.java b/src/main/java/de/ozgcloud/admin/organisationseinheit/SyncScheduler.java index 26739cdddb6d4e5b5426756321edb0362e2031ed..619e3f0878149596ae3b61a7d214eb9820cb7cf0 100644 --- a/src/main/java/de/ozgcloud/admin/organisationseinheit/SyncScheduler.java +++ b/src/main/java/de/ozgcloud/admin/organisationseinheit/SyncScheduler.java @@ -4,6 +4,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import lombok.RequiredArgsConstructor; +import net.javacrumbs.shedlock.spring.annotation.SchedulerLock; @Component @RequiredArgsConstructor @@ -11,6 +12,7 @@ class SyncScheduler { private final SyncService syncService; + @SchedulerLock(name = "SyncScheduler_syncOrganisationsEinheitenFromKeycloak", lockAtLeastFor = "PT5M", lockAtMostFor = "PT23H") @Scheduled(cron = "${ozgcloud.administration.sync.organisationseinheiten.cron}") public void syncOrganisationsEinheitenFromKeycloak() { syncService.syncOrganisationsEinheitenFromKeycloak(); diff --git a/src/main/resources/application-local.yaml b/src/main/resources/application-local.yaml index 7c4f421b1807160369bd03e4aa68eacf01de2987..9bd2cabd6802141106d2674605d927298b33aff7 100644 --- a/src/main/resources/application-local.yaml +++ b/src/main/resources/application-local.yaml @@ -2,6 +2,7 @@ spring: data: mongodb: uri: mongodb://localhost:27017/config-db + database: config-db security: user: name: user