diff --git a/pom.xml b/pom.xml
index e20e68ea..cb4dbb03 100644
--- a/pom.xml
+++ b/pom.xml
@@ -82,6 +82,13 @@
pom
import
+
+ org.junit
+ junit-bom
+ ${junit-jupiter.version}
+ import
+ pom
+
org.springframework.cloud
spring-cloud-starter-netflix-ribbon
@@ -140,6 +147,11 @@
blockhound-junit-platform
${blockhound.version}
+
+ io.projectreactor.tools
+ blockhound-junit-platform
+ ${blockhound.version}
+
diff --git a/spring-cloud-gateway-core/pom.xml b/spring-cloud-gateway-core/pom.xml
index 3578423b..bf02afe7 100644
--- a/spring-cloud-gateway-core/pom.xml
+++ b/spring-cloud-gateway-core/pom.xml
@@ -102,6 +102,26 @@
spring-boot-starter-test
test
+
+ org.junit.jupiter
+ junit-jupiter-api
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ test
+
+
+ org.junit.platform
+ junit-platform-launcher
+ test
+
+
+ org.junit.vintage
+ junit-vintage-engine
+ test
+
org.springframework.cloud
spring-cloud-test-support
diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java
index e087c063..b4281dd8 100644
--- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java
+++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java
@@ -215,6 +215,7 @@ public class GatewayAutoConfiguration {
@Bean
@Primary
+ @ConditionalOnMissingBean(name = "cachedCompositeRouteLocator")
// TODO: property to disable composite?
public RouteLocator cachedCompositeRouteLocator(List routeLocators) {
return new CachingRouteLocator(
diff --git a/spring-cloud-gateway-core/src/test/java/reactor/blockhound/integration/CustomBlockHoundIntegration.java b/spring-cloud-gateway-core/src/test/java/reactor/blockhound/integration/CustomBlockHoundIntegration.java
index e8352af7..1a05bd1d 100644
--- a/spring-cloud-gateway-core/src/test/java/reactor/blockhound/integration/CustomBlockHoundIntegration.java
+++ b/spring-cloud-gateway-core/src/test/java/reactor/blockhound/integration/CustomBlockHoundIntegration.java
@@ -42,11 +42,32 @@ public class CustomBlockHoundIntegration implements BlockHoundIntegration {
builder.allowBlockingCallsInside("org.springframework.util.MimeTypeUtils",
"generateMultipartBoundary");
+ // SPRING DATA REDIS RELATED
+
+ // Uses Unsafe#park
+ builder.allowBlockingCallsInside(
+ "org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory",
+ "getReactiveConnection");
+
+ // NETTY RELATED
+
+ // Uses Thread#sleep
+ builder.allowBlockingCallsInside("io.netty.channel.nio.NioEventLoop",
+ "handleLoopException");
+ builder.allowBlockingCallsInside(
+ "io.netty.util.concurrent.SingleThreadEventExecutor", "confirmShutdown");
+
+ // Uses Unsafe#park
+ builder.allowBlockingCallsInside("io.netty.util.concurrent.GlobalEventExecutor",
+ "execute");
+
// SECURITY RELATED
// For HTTPS traffic
builder.allowBlockingCallsInside("io.netty.handler.ssl.SslHandler",
"channelActive");
+ builder.allowBlockingCallsInside("io.netty.handler.ssl.SslHandler",
+ "channelInactive");
builder.allowBlockingCallsInside("io.netty.handler.ssl.SslHandler", "unwrap");
builder.allowBlockingCallsInside("io.netty.handler.ssl.SslContext",
"newClientContextInternal");