@@ -5,15 +5,23 @@ import com.roche.ambassador.configuration.properties.IndexingLockType
55import com.roche.ambassador.extensions.LoggerDelegate
66import com.roche.ambassador.extensions.toPrettyString
77import com.roche.ambassador.storage.indexing.IndexingRepository
8+ import net.javacrumbs.shedlock.core.LockProvider
9+ import net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider
10+ import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock
11+ import org.springframework.beans.factory.InitializingBean
12+ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
813import org.springframework.context.annotation.Bean
914import org.springframework.context.annotation.Configuration
15+ import org.springframework.jdbc.core.JdbcTemplate
16+ import org.springframework.scheduling.annotation.EnableScheduling
17+ import javax.sql.DataSource
1018
1119@Configuration
12- internal class IndexingConfiguration (
13- private val indexerProperties : IndexerProperties
14- ) {
20+ internal class IndexingConfiguration (private val indexerProperties : IndexerProperties ) {
1521
16- private val log by LoggerDelegate ()
22+ companion object {
23+ private val log by LoggerDelegate ()
24+ }
1725
1826 @Bean
1927 fun indexingLock (indexingRepository : IndexingRepository ): IndexingLock {
@@ -23,4 +31,31 @@ internal class IndexingConfiguration(
2331 IndexingLockType .DATABASE -> IndexingLock .createDatabaseLock(indexingRepository)
2432 }
2533 }
34+
35+ @Configuration
36+ @ConditionalOnProperty(prefix = " ambassador.indexer.scheduler" , name = [" enabled" ], matchIfMissing = false , havingValue = " true" )
37+ @EnableScheduling
38+ @EnableSchedulerLock(defaultLockAtMostFor = " 10m" )
39+ inner class SchedulerConfiguration : InitializingBean {
40+
41+ override fun afterPropertiesSet () {
42+ log.info(" Initialized indexing scheduler with cron: ${indexerProperties.scheduler.cron} " )
43+ }
44+
45+ @Bean
46+ fun lockProvider (dataSource : DataSource ): LockProvider {
47+ return JdbcTemplateLockProvider (
48+ JdbcTemplateLockProvider .Configuration .builder()
49+ .withJdbcTemplate(JdbcTemplate (dataSource))
50+ .usingDbTime()
51+ .build()
52+ )
53+ }
54+
55+ @Bean
56+ fun indexingScheduler (indexingService : IndexingService ): ScheduledIndexingInitializer {
57+ return ScheduledIndexingInitializer (indexingService)
58+ }
59+ }
60+
2661}
0 commit comments