From c4e4d20d4410c199afc548bfb5ac8244c8a2d19c Mon Sep 17 00:00:00 2001 From: yizhenqiang Date: Sat, 9 Mar 2024 03:30:06 +0800 Subject: [PATCH] RoutePredicateHandlerMapping can be optimized (#3010) * One optimization method in reactive programming is to reduce the number of nested layers of Flux or Mono, which can not only save memory, but also improve execution efficiency, in theory, there is no need to nest a layer of Mono. * Optimize unnecessary reactive code to improve operational efficiency * restore and fix compilation failure --------- Co-authored-by: manzhizhen Co-authored-by: yizhenqiang --- .../cloud/gateway/handler/RoutePredicateHandlerMapping.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMapping.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMapping.java index 2df3e0fb..3e818321 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMapping.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMapping.java @@ -88,14 +88,14 @@ public class RoutePredicateHandlerMapping extends AbstractHandlerMapping { exchange.getAttributes().put(GATEWAY_REACTOR_CONTEXT_ATTR, contextView); return lookupRoute(exchange) // .log("route-predicate-handler-mapping", Level.FINER) //name this - .flatMap((Function>) r -> { + .map((Function) r -> { exchange.getAttributes().remove(GATEWAY_PREDICATE_ROUTE_ATTR); if (logger.isDebugEnabled()) { logger.debug("Mapping [" + getExchangeDesc(exchange) + "] to " + r); } exchange.getAttributes().put(GATEWAY_ROUTE_ATTR, r); - return Mono.just(webHandler); + return webHandler; }).switchIfEmpty(Mono.empty().then(Mono.fromRunnable(() -> { exchange.getAttributes().remove(GATEWAY_PREDICATE_ROUTE_ATTR); if (logger.isTraceEnabled()) {