diff --git a/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/api/GatewayApiMatcherManager.java b/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/api/GatewayApiMatcherManager.java index 5c1567ca..7ba47b66 100644 --- a/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/api/GatewayApiMatcherManager.java +++ b/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/sc/api/GatewayApiMatcherManager.java @@ -15,23 +15,23 @@ */ package com.alibaba.csp.sentinel.adapter.gateway.sc.api; +import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition; +import com.alibaba.csp.sentinel.adapter.gateway.sc.api.matcher.WebExchangeApiMatcher; + import java.util.Collections; +import java.util.HashMap; import java.util.Map; import java.util.Optional; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; -import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition; -import com.alibaba.csp.sentinel.adapter.gateway.sc.api.matcher.WebExchangeApiMatcher; - /** * @author Eric Zhao * @since 1.6.0 */ public final class GatewayApiMatcherManager { - private static final Map API_MATCHER_MAP = new ConcurrentHashMap<>(); + private static volatile Map API_MATCHER_MAP = new HashMap<>(); public static Map getApiMatcherMap() { return Collections.unmodifiableMap(API_MATCHER_MAP); @@ -50,15 +50,12 @@ public final class GatewayApiMatcherManager { } static synchronized void loadApiDefinitions(/*@Valid*/ Set definitions) { - if (definitions == null || definitions.isEmpty()) { - API_MATCHER_MAP.clear(); - return; + Map apiMatcherMap = new HashMap<>(); + for (ApiDefinition definition : definitions) { + apiMatcherMap.put(definition.getApiName(), new WebExchangeApiMatcher(definition)); } - definitions.forEach(GatewayApiMatcherManager::addApiDefinition); - } - static void addApiDefinition(ApiDefinition definition) { - API_MATCHER_MAP.put(definition.getApiName(), new WebExchangeApiMatcher(definition)); + API_MATCHER_MAP = apiMatcherMap; } private GatewayApiMatcherManager() {}