From 10afc779411852b4a8f5440606773fbe0f5e5562 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Majer?= Date: Tue, 22 Dec 2020 10:57:13 +0100 Subject: [PATCH] Bugfix of #47. fixedDelayString error - embeddedValueResolver null in DefaultSchedulingPolicyProvider --- .../scheduler/CoroutineSchedulerConfiguration.kt | 10 +++++++--- .../coroutine/scheduler/CoroutineSchedulerSpec.groovy | 3 ++- .../scheduler/CoroutineSchedulerSpecConfigurations.kt | 10 ++++++++++ .../springframework/kotlin/coroutine/scheduler/app.yml | 2 ++ 4 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 spring-kotlin-coroutine/src/test/resources/org/springframework/kotlin/coroutine/scheduler/app.yml diff --git a/spring-kotlin-coroutine/src/main/kotlin/org/springframework/kotlin/coroutine/scheduler/CoroutineSchedulerConfiguration.kt b/spring-kotlin-coroutine/src/main/kotlin/org/springframework/kotlin/coroutine/scheduler/CoroutineSchedulerConfiguration.kt index 0bafa76..c551ef6 100644 --- a/spring-kotlin-coroutine/src/main/kotlin/org/springframework/kotlin/coroutine/scheduler/CoroutineSchedulerConfiguration.kt +++ b/spring-kotlin-coroutine/src/main/kotlin/org/springframework/kotlin/coroutine/scheduler/CoroutineSchedulerConfiguration.kt @@ -45,9 +45,13 @@ internal open class CoroutineSchedulerConfiguration: ImportAware { @Bean(COROUTINE_SCHEDULED_ANNOTATION_PROCESSOR_BEAN_NAME) open fun coroutineScheduledAnnotationBeanPostProcessor( - contextResolver: GlobalCoroutineContextResolver + contextResolver: GlobalCoroutineContextResolver, + schedulingPolicyProvider: SchedulingPolicyProvider ): ScheduledAnnotationBeanPostProcessor = - CoroutineScheduledAnnotationBeanPostProcessor(schedulerDispatcher, contextResolver, DefaultSchedulingPolicyProvider()) + CoroutineScheduledAnnotationBeanPostProcessor(schedulerDispatcher, contextResolver, schedulingPolicyProvider) + + @Bean + open fun defaultSchedulingPolicyProvider() = DefaultSchedulingPolicyProvider() } @Configuration @@ -70,4 +74,4 @@ private class CoroutineSchedulerPostProcessor : BeanDefinitionRegistryPostProces registry.removeBeanDefinition(COROUTINE_SCHEDULED_ANNOTATION_PROCESSOR_BEAN_NAME) } } -} \ No newline at end of file +} diff --git a/spring-kotlin-coroutine/src/test/groovy/org/springframework/kotlin/coroutine/scheduler/CoroutineSchedulerSpec.groovy b/spring-kotlin-coroutine/src/test/groovy/org/springframework/kotlin/coroutine/scheduler/CoroutineSchedulerSpec.groovy index 8b82bec..a7094b0 100644 --- a/spring-kotlin-coroutine/src/test/groovy/org/springframework/kotlin/coroutine/scheduler/CoroutineSchedulerSpec.groovy +++ b/spring-kotlin-coroutine/src/test/groovy/org/springframework/kotlin/coroutine/scheduler/CoroutineSchedulerSpec.groovy @@ -63,7 +63,8 @@ class CoroutineSchedulerSpec extends Specification { counter <= 10 where: - configuration << [FixedDelayWithInitialDelayConfiguration, FixedDelayWithInitialDelayStringConfiguration] + configuration << [FixedDelayWithInitialDelayConfiguration, FixedDelayWithInitialDelayStringConfiguration, + FixedDelayStringWithInitialDelayStringConfiguration] } @Unroll diff --git a/spring-kotlin-coroutine/src/test/kotlin/org/springframework/kotlin/coroutine/scheduler/CoroutineSchedulerSpecConfigurations.kt b/spring-kotlin-coroutine/src/test/kotlin/org/springframework/kotlin/coroutine/scheduler/CoroutineSchedulerSpecConfigurations.kt index ec0d888..aab8e86 100644 --- a/spring-kotlin-coroutine/src/test/kotlin/org/springframework/kotlin/coroutine/scheduler/CoroutineSchedulerSpecConfigurations.kt +++ b/spring-kotlin-coroutine/src/test/kotlin/org/springframework/kotlin/coroutine/scheduler/CoroutineSchedulerSpecConfigurations.kt @@ -19,6 +19,7 @@ package org.springframework.kotlin.coroutine.scheduler import kotlinx.coroutines.delay import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration +import org.springframework.context.annotation.PropertySource import org.springframework.kotlin.coroutine.EnableCoroutine import org.springframework.kotlin.coroutine.context.DEFAULT_DISPATCHER import org.springframework.scheduling.annotation.EnableScheduling @@ -90,6 +91,15 @@ open class FixedDelayWithInitialDelayStringConfiguration : DefaultDispatcherConf } } +@Configuration +@PropertySource("classpath:/org/springframework/kotlin/coroutine/scheduler/app.yml") +open class FixedDelayStringWithInitialDelayStringConfiguration : DefaultDispatcherConfiguration() { + @Scheduled(initialDelayString = "\${initialDelay}", fixedDelayString = "\${fixedDelay}") + suspend open fun task() { + counter().incrementAndGet() + } +} + @Configuration open class FixedRateConfiguration : DefaultDispatcherConfiguration() { @Scheduled(fixedRate = 10) diff --git a/spring-kotlin-coroutine/src/test/resources/org/springframework/kotlin/coroutine/scheduler/app.yml b/spring-kotlin-coroutine/src/test/resources/org/springframework/kotlin/coroutine/scheduler/app.yml new file mode 100644 index 0000000..7dd1131 --- /dev/null +++ b/spring-kotlin-coroutine/src/test/resources/org/springframework/kotlin/coroutine/scheduler/app.yml @@ -0,0 +1,2 @@ +initialDelay: 1000 +fixedDelay: 100