diff --git a/spring-grpc-server-spring-boot-autoconfigure/pom.xml b/spring-grpc-server-spring-boot-autoconfigure/pom.xml
index 780be95f..7e0fda78 100644
--- a/spring-grpc-server-spring-boot-autoconfigure/pom.xml
+++ b/spring-grpc-server-spring-boot-autoconfigure/pom.xml
@@ -142,6 +142,11 @@
micrometer-core
true
+
+ io.micrometer
+ context-propagation
+ true
+
io.netty
netty-transport-native-epoll
diff --git a/spring-grpc-server-spring-boot-autoconfigure/src/main/java/org/springframework/boot/grpc/server/autoconfigure/GrpcServerObservationAutoConfiguration.java b/spring-grpc-server-spring-boot-autoconfigure/src/main/java/org/springframework/boot/grpc/server/autoconfigure/GrpcServerObservationAutoConfiguration.java
index c40c2728..8a026dc0 100644
--- a/spring-grpc-server-spring-boot-autoconfigure/src/main/java/org/springframework/boot/grpc/server/autoconfigure/GrpcServerObservationAutoConfiguration.java
+++ b/spring-grpc-server-spring-boot-autoconfigure/src/main/java/org/springframework/boot/grpc/server/autoconfigure/GrpcServerObservationAutoConfiguration.java
@@ -53,7 +53,7 @@ ObservationGrpcServerInterceptor observationGrpcServerInterceptor(ObservationReg
}
@Configuration(proxyBeanMethods = false)
- @ConditionalOnClass(name = "io.grpc.kotlin.AbstractCoroutineStub")
+ @ConditionalOnClass(name = { "io.grpc.kotlin.AbstractCoroutineStub", "io.micrometer.context.ContextRegistry" })
static class GrpcServerCoroutineStubConfiguration {
@Bean
diff --git a/spring-grpc-server-spring-boot-autoconfigure/src/test/java/org/springframework/boot/grpc/server/autoconfigure/GrpcServerObservationAutoConfigurationTests.java b/spring-grpc-server-spring-boot-autoconfigure/src/test/java/org/springframework/boot/grpc/server/autoconfigure/GrpcServerObservationAutoConfigurationTests.java
index 38ee2825..5c5d112b 100644
--- a/spring-grpc-server-spring-boot-autoconfigure/src/test/java/org/springframework/boot/grpc/server/autoconfigure/GrpcServerObservationAutoConfigurationTests.java
+++ b/spring-grpc-server-spring-boot-autoconfigure/src/test/java/org/springframework/boot/grpc/server/autoconfigure/GrpcServerObservationAutoConfigurationTests.java
@@ -33,7 +33,9 @@
import io.grpc.BindableService;
import io.grpc.ServerInterceptor;
+import io.micrometer.context.ContextRegistry;
import io.micrometer.core.instrument.binder.grpc.ObservationGrpcServerInterceptor;
+import io.micrometer.core.instrument.kotlin.ObservationCoroutineContextServerInterceptor;
import io.micrometer.observation.ObservationRegistry;
/**
@@ -131,4 +133,12 @@ void whenAllConditionsAreMetThenInterceptorConfiguredAsExpected() {
}, "Two global interceptors expected")));
}
+ @Test
+ void whenMicrometerContextPropagationIsNotOnClasspathCoroutineInterceptorIsNotCreated() {
+ this.validContextRunner()
+ .withClassLoader(new FilteredClassLoader(ContextRegistry.class))
+ .run((context) -> assertThat(context).hasSingleBean(ObservationGrpcServerInterceptor.class)
+ .doesNotHaveBean(ObservationCoroutineContextServerInterceptor.class));
+ }
+
}