refactor: rename some core classes about routing (#3082)

refactor: rename some core classes about routing
pull/3084/head
Steve Rao 2 years ago committed by GitHub
parent 6b6a804258
commit 85db59ec38
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -95,17 +95,14 @@ public class ConsumerApplication {
labelRouteData.setDefaultRouteVersion("v1");
Rule routeRule = new HeaderRoutingRule();
routeRule.setType("header");
routeRule.setCondition("=");
routeRule.setKey("tag");
routeRule.setValue("gray");
Rule routeRule1 = new UrlRoutingRule.Parameter();
routeRule1.setType("parameter");
Rule routeRule1 = new UrlRoutingRule.ParameterRoutingRule();
routeRule1.setCondition(">");
routeRule1.setKey("id");
routeRule1.setValue("10");
Rule routeRule2 = new UrlRoutingRule.PathRoutingRule();
routeRule2.setType("path");
routeRule2.setCondition("=");
routeRule2.setValue("/router-test");
routeRules.add(routeRule);
@ -140,17 +137,14 @@ public class ConsumerApplication {
labelRouteData.setDefaultRouteVersion("v1");
Rule routeRule = new HeaderRoutingRule();
routeRule.setType("header");
routeRule.setCondition("=");
routeRule.setKey("tag");
routeRule.setValue("gray");
Rule routeRule1 = new UrlRoutingRule.Parameter();
routeRule1.setType("parameter");
Rule routeRule1 = new UrlRoutingRule.ParameterRoutingRule();
routeRule1.setCondition(">");
routeRule1.setKey("id");
routeRule1.setValue("10");
Rule routeRule2 = new UrlRoutingRule.PathRoutingRule();
routeRule2.setType("path");
routeRule2.setCondition("=");
routeRule2.setValue("/router-test");
routeRules.add(routeRule);

@ -24,7 +24,7 @@ import java.util.Objects;
*/
public class HeaderRoutingRule implements Rule {
private String type;
private final String type = "header";
private String condition;
@ -67,11 +67,6 @@ public class HeaderRoutingRule implements Rule {
return this.type;
}
@Override
public void setType(String type) {
this.type = type;
}
@Override
public boolean equals(Object o) {
if (this == o) {

@ -26,20 +26,53 @@ public interface Rule {
* get type of rule.
* @return String
*/
String getType();
default String getType() {
return null;
}
void setType(String type);
String getCondition();
/**
* get condition.
* @return String
*/
default String getCondition() {
return null;
}
void setCondition(String condition);
/**
* set condition.
* @param condition {@link String}
*/
default void setCondition(String condition) {
}
String getKey();
/**
* get key of rule.
* @return String
*/
default String getKey() {
return null;
}
void setKey(String key);
/**
* set key of rule.
* @param key {@link String}
*/
default void setKey(String key) {
}
String getValue();
/**
* get value of rule.
* @return String
*/
default String getValue() {
return null;
}
void setValue(String value);
/**
* set value of rule.
* @param value {@link String}
*/
default void setValue(String value) {
}
}

@ -26,7 +26,7 @@ public class UrlRoutingRule {
public static class PathRoutingRule implements Rule {
private String type;
private final String type = "path";
private String condition;
@ -67,11 +67,6 @@ public class UrlRoutingRule {
return this.type;
}
@Override
public void setType(String type) {
this.type = type;
}
@Override
public boolean equals(Object o) {
if (this == o) {
@ -99,9 +94,9 @@ public class UrlRoutingRule {
}
public static class Parameter implements Rule {
public static class ParameterRoutingRule implements Rule {
private String type;
private final String type = "parameter";
private String condition;
@ -144,11 +139,6 @@ public class UrlRoutingRule {
return this.type;
}
@Override
public void setType(String type) {
this.type = type;
}
@Override
public boolean equals(Object o) {
if (this == o) {
@ -157,11 +147,11 @@ public class UrlRoutingRule {
if (o == null || getClass() != o.getClass()) {
return false;
}
Parameter parameter = (Parameter) o;
return Objects.equals(getType(), parameter.getType())
&& Objects.equals(getCondition(), parameter.getCondition())
&& Objects.equals(getKey(), parameter.getKey())
&& Objects.equals(getValue(), parameter.getValue());
ParameterRoutingRule parameterRoutingRule = (ParameterRoutingRule) o;
return Objects.equals(getType(), parameterRoutingRule.getType())
&& Objects.equals(getCondition(), parameterRoutingRule.getCondition())
&& Objects.equals(getKey(), parameterRoutingRule.getKey())
&& Objects.equals(getValue(), parameterRoutingRule.getValue());
}
@Override

@ -85,6 +85,11 @@
<artifactId>spring-cloud-starter-alibaba-governance-routing</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

@ -37,8 +37,6 @@ public abstract class AbstractXdsResolveFilter<T>
protected static final String ALLOW_ANY = "allow_any";
protected static final String PATH = "path";
protected static final String VIRTUAL_INBOUND = "virtualInbound";
protected static final String CONNECTION_MANAGER = "envoy.filters.network.http_connection_manager";

@ -135,15 +135,14 @@ public class RoutingXdsResolveFilter
for (QueryParameterMatcher parameterMatcher : routeMatch
.getQueryParametersList()) {
UrlRoutingRule.Parameter parameter = ConvUtil
UrlRoutingRule.ParameterRoutingRule parameterRoutingRule = ConvUtil
.parameterMatcher2ParameterRule(parameterMatcher);
if (parameter != null) {
routeRules.add(parameter);
if (parameterRoutingRule != null) {
routeRules.add(parameterRoutingRule);
}
}
UrlRoutingRule.PathRoutingRule path = new UrlRoutingRule.PathRoutingRule();
path.setType(PATH);
switch (routeMatch.getPathSpecifierCase()) {
case PREFIX:
path.setCondition(StringMatcherType.PREFIX.toString());

@ -34,10 +34,6 @@ import io.envoyproxy.envoy.type.matcher.v3.RegexMatcher;
*/
public final class ConvUtil {
private static final String HEADER = "header";
private static final String PARAMETER = "parameter";
private ConvUtil() {
}
@ -125,17 +121,16 @@ public final class ConvUtil {
return headerMatcher.getStringMatch();
}
public static UrlRoutingRule.Parameter parameterMatcher2ParameterRule(
public static UrlRoutingRule.ParameterRoutingRule parameterMatcher2ParameterRule(
QueryParameterMatcher queryParameterMatcher) {
UrlRoutingRule.Parameter parameter = new UrlRoutingRule.Parameter();
UrlRoutingRule.ParameterRoutingRule parameterRoutingRule = new UrlRoutingRule.ParameterRoutingRule();
StringMatcher stringMatcher = ConvUtil
.convStringMatcher(queryParameterMatcher.getStringMatch());
if (stringMatcher != null) {
parameter.setCondition(stringMatcher.getType().toString());
parameter.setKey(queryParameterMatcher.getName());
parameter.setValue(stringMatcher.getMatcher());
parameter.setType(PARAMETER);
return parameter;
parameterRoutingRule.setCondition(stringMatcher.getType().toString());
parameterRoutingRule.setKey(queryParameterMatcher.getName());
parameterRoutingRule.setValue(stringMatcher.getMatcher());
return parameterRoutingRule;
}
return null;
}
@ -149,7 +144,6 @@ public final class ConvUtil {
headerRule.setCondition(stringMatcher.getType().toString());
headerRule.setKey(headerMatcher.getName());
headerRule.setValue(stringMatcher.getMatcher());
headerRule.setType(HEADER);
return headerRule;
}
return null;

@ -55,12 +55,6 @@ public class OpenSergoTrafficRouterParser {
protected static final Logger log = LoggerFactory
.getLogger(OpenSergoTrafficRouterParser.class);
private static final String HEADER = "header";
private static final String PARAMETER = "parameter";
private static final String PATH = "path";
public OpenSergoTrafficRouterParser() {
}
@ -186,15 +180,14 @@ public class OpenSergoTrafficRouterParser {
for (QueryParameterMatcher parameterMatcher : routeMatch
.getQueryParametersList()) {
UrlRoutingRule.Parameter parameter = parameterMatcher2ParameterRule(
UrlRoutingRule.ParameterRoutingRule parameterRoutingRule = parameterMatcher2ParameterRule(
parameterMatcher);
if (parameter != null) {
routeRules.add(parameter);
if (parameterRoutingRule != null) {
routeRules.add(parameterRoutingRule);
}
}
UrlRoutingRule.PathRoutingRule path = new UrlRoutingRule.PathRoutingRule();
path.setType(PATH);
switch (routeMatch.getPathSpecifierCase()) {
case PREFIX:
path.setCondition(StringMatcherType.PREFIX.toString());
@ -222,17 +215,16 @@ public class OpenSergoTrafficRouterParser {
return routeRules;
}
private UrlRoutingRule.Parameter parameterMatcher2ParameterRule(
private UrlRoutingRule.ParameterRoutingRule parameterMatcher2ParameterRule(
QueryParameterMatcher queryParameterMatcher) {
UrlRoutingRule.Parameter parameter = new UrlRoutingRule.Parameter();
UrlRoutingRule.ParameterRoutingRule parameterRoutingRule = new UrlRoutingRule.ParameterRoutingRule();
StringMatcher stringMatcher = ConvUtils
.convStringMatcher(queryParameterMatcher.getStringMatch());
if (stringMatcher != null) {
parameter.setCondition(stringMatcher.getType().toString());
parameter.setKey(queryParameterMatcher.getName());
parameter.setValue(stringMatcher.getMatcher());
parameter.setType(PARAMETER);
return parameter;
parameterRoutingRule.setCondition(stringMatcher.getType().toString());
parameterRoutingRule.setKey(queryParameterMatcher.getName());
parameterRoutingRule.setValue(stringMatcher.getMatcher());
return parameterRoutingRule;
}
return null;
}
@ -245,7 +237,6 @@ public class OpenSergoTrafficRouterParser {
headerRule.setCondition(stringMatcher.getType().toString());
headerRule.setKey(headerMatcher.getName());
headerRule.setValue(stringMatcher.getMatcher());
headerRule.setType(HEADER);
return headerRule;
}
return null;

@ -20,11 +20,13 @@
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<optional>true</optional>
</dependency>
<dependency>

@ -20,12 +20,14 @@ import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
import com.alibaba.cloud.routing.util.RequestContext;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
/**
* @author HH
* @since 2.2.10-RC1
@ -37,7 +39,8 @@ public class RoutingFeignInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
final HttpServletRequest request = RequestContext.getRequest();
final HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
.getRequestAttributes()).getRequest();
final Enumeration<String> headerNames = request.getHeaderNames();
if (headerNames == null) {
return;

@ -37,7 +37,6 @@ import com.alibaba.cloud.routing.publish.TargetServiceChangedPublisher;
import com.alibaba.cloud.routing.repository.RoutingDataRepository;
import com.alibaba.cloud.routing.util.ConditionMatchUtil;
import com.alibaba.cloud.routing.util.LoadBalanceUtil;
import com.alibaba.cloud.routing.util.RequestContext;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;
import com.netflix.loadbalancer.AbstractServerPredicate;
@ -49,6 +48,8 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
/**
* @author HH
@ -94,16 +95,6 @@ public class RoutingLoadBalanceRule extends PredicateBasedRule {
*/
private AbstractServerPredicate predicate;
/**
* Match condition util.
*/
private final ConditionMatchUtil conditionMatchUtil = new ConditionMatchUtil();
/**
* Load Balance Util.
*/
private final LoadBalanceUtil loadBalanceUtil = new LoadBalanceUtil();
@Autowired
private NacosDiscoveryProperties nacosDiscoveryProperties;
@ -130,7 +121,7 @@ public class RoutingLoadBalanceRule extends PredicateBasedRule {
final HashMap<String, List<MatchService>> routeData = routingDataRepository
.getRouteRule(targetServiceName);
if (routeData == null) {
return loadBalanceUtil.loadBalanceByOrdinaryRule(loadBalancer, key,
return LoadBalanceUtil.loadBalanceByOrdinaryRule(loadBalancer, key,
routingProperties.getRule());
}
@ -204,7 +195,8 @@ public class RoutingLoadBalanceRule extends PredicateBasedRule {
HashMap<String, Integer> weightMap, HashSet<String> fallbackVersionSet,
HashMap<String, Integer> fallbackWeightMap) {
// Get request metadata.
final HttpServletRequest request = RequestContext.getRequest();
final HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
.getRequestAttributes()).getRequest();
final Enumeration<String> headerNames = request.getHeaderNames();
HashMap<String, String> requestHeaders = new HashMap<>();
if (headerNames != null) {
@ -354,19 +346,19 @@ public class RoutingLoadBalanceRule extends PredicateBasedRule {
switch (condition) {
case ConditionMatchUtil.EXACT:
case ConditionMatchUtil.EQUAL:
return conditionMatchUtil.exactMatch(str, comparator);
return ConditionMatchUtil.exactMatch(str, comparator);
case ConditionMatchUtil.REGEX:
return conditionMatchUtil.regexMatch(str, comparator);
return ConditionMatchUtil.regexMatch(str, comparator);
case ConditionMatchUtil.PREFIX:
return conditionMatchUtil.prefixMatch(str, comparator);
return ConditionMatchUtil.prefixMatch(str, comparator);
case ConditionMatchUtil.CONTAIN:
return conditionMatchUtil.containMatch(str, comparator);
return ConditionMatchUtil.containMatch(str, comparator);
case ConditionMatchUtil.GREATER:
return conditionMatchUtil.greaterMatch(str, comparator);
return ConditionMatchUtil.greaterMatch(str, comparator);
case ConditionMatchUtil.LESS:
return conditionMatchUtil.lessMatch(str, comparator);
return ConditionMatchUtil.lessMatch(str, comparator);
case ConditionMatchUtil.NOT_EQUAL:
return conditionMatchUtil.noEqualMatch(str, comparator);
return ConditionMatchUtil.noEqualMatch(str, comparator);
default:
throw new UnsupportedOperationException(
"unsupported string compare operation");

@ -22,7 +22,7 @@ import java.util.regex.Pattern;
* @author HH
* @since 2.2.10-RC1
*/
public class ConditionMatchUtil {
public final class ConditionMatchUtil {
/**
* Sign of exact.
@ -64,31 +64,34 @@ public class ConditionMatchUtil {
*/
public static final String NOT_EQUAL = "not_equal";
public boolean exactMatch(String one, String another) {
private ConditionMatchUtil() {
}
public static boolean exactMatch(String one, String another) {
return one.equals(another);
}
public boolean regexMatch(String regex, String path) {
public static boolean regexMatch(String regex, String path) {
return Pattern.matches(regex, path);
}
public boolean containMatch(String sub, String base) {
public static boolean containMatch(String sub, String base) {
return base.contains(sub);
}
public boolean prefixMatch(String prefix, String str) {
public static boolean prefixMatch(String prefix, String str) {
return str.startsWith(prefix);
}
public boolean greaterMatch(String str, String comparor) {
public static boolean greaterMatch(String str, String comparor) {
return Integer.parseInt(comparor) > Integer.parseInt(str);
}
public boolean lessMatch(String str, String comparor) {
public static boolean lessMatch(String str, String comparor) {
return Integer.parseInt(comparor) < Integer.parseInt(str);
}
public boolean noEqualMatch(String str, String comparor) {
public static boolean noEqualMatch(String str, String comparor) {
return Integer.parseInt(str) == Integer.parseInt(comparor);
}

@ -30,7 +30,7 @@ import com.netflix.loadbalancer.ZoneAvoidanceRule;
* @author HH
* @since 2.2.10-RC1
*/
public class LoadBalanceUtil {
public final class LoadBalanceUtil {
/**
* Default polling.
@ -67,35 +67,43 @@ public class LoadBalanceUtil {
*/
public static final String AVAILABILITY_FILTERING_RULE = "AvailabilityFilteringRule";
public Server loadBalanceByOrdinaryRule(ILoadBalancer iLoadBalancer, Object key,
String rule) {
if (rule == null) {
rule = ZONE_AVOIDANCE_RULE;
}
private static final RoundRobinRule roundRobinRule = new RoundRobinRule();
private static final RandomRule randomRule = new RandomRule();
private static final WeightedResponseTimeRule weightedResponseTimeRule = new WeightedResponseTimeRule();
private static final BestAvailableRule bestAvailableRule = new BestAvailableRule();
private static final RetryRule retryRule = new RetryRule();
private static final ZoneAvoidanceRule zoneAvoidanceRule = new ZoneAvoidanceRule();
private static final AvailabilityFilteringRule availabilityFilteringRule = new AvailabilityFilteringRule();
private LoadBalanceUtil() {
}
public static Server loadBalanceByOrdinaryRule(ILoadBalancer iLoadBalancer,
Object key, String rule) {
switch (rule) {
case ROUND_ROBIN_RULE:
return new RoundRobinRule().choose(iLoadBalancer, key);
return roundRobinRule.choose(iLoadBalancer, key);
case RANDOM_RULE:
return new RandomRule().choose(iLoadBalancer, key);
return randomRule.choose(iLoadBalancer, key);
case WEIGHTED_RESPONSE_TIME_RULE:
return new WeightedResponseTimeRule().choose(iLoadBalancer, key);
return weightedResponseTimeRule.choose(iLoadBalancer, key);
case BEST_AVAILABLE_RULE:
BestAvailableRule bestAvailableRule = new BestAvailableRule();
bestAvailableRule.setLoadBalancer(iLoadBalancer);
return bestAvailableRule.choose(key);
case RETRY_RULE:
return new RetryRule().choose(iLoadBalancer, key);
case ZONE_AVOIDANCE_RULE:
ZoneAvoidanceRule zoneAvoidanceRule = new ZoneAvoidanceRule();
zoneAvoidanceRule.setLoadBalancer(iLoadBalancer);
return zoneAvoidanceRule.choose(key);
return retryRule.choose(iLoadBalancer, key);
case AVAILABILITY_FILTERING_RULE:
AvailabilityFilteringRule availabilityFilteringRule = new AvailabilityFilteringRule();
availabilityFilteringRule.setLoadBalancer(iLoadBalancer);
return availabilityFilteringRule.choose(key);
default:
throw new UnsupportedOperationException(
"unsupported string compare operation");
zoneAvoidanceRule.setLoadBalancer(iLoadBalancer);
return zoneAvoidanceRule.choose(key);
}
}

@ -1,49 +0,0 @@
/*
* Copyright 2013-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.cloud.routing.util;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author HH
* @since 2.2.10-RC1
*/
public final class RequestContext {
private static final Logger LOG = LoggerFactory.getLogger(RequestContext.class);
private static final ThreadLocal<HttpServletRequest> REQUEST_THREAD_HOLDER = new ThreadLocal<>();
private RequestContext() {
}
public static HttpServletRequest getRequest() {
return REQUEST_THREAD_HOLDER.get();
}
public static void setRequest(HttpServletRequest request) {
REQUEST_THREAD_HOLDER.set(request);
}
public static void removeRequest() {
REQUEST_THREAD_HOLDER.remove();
}
}

@ -1,42 +0,0 @@
/*
* Copyright 2013-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.cloud.routing.web;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author HH
* @since 2.2.10-RC1
*/
@Configuration(proxyBeanMethods = false)
public class WebMvcAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public WebMvcInterceptor webMvcInterceptor() {
return new WebMvcInterceptor();
}
@Bean
@ConditionalOnMissingBean
public WebMvcConfig webMvcConfig() {
return new WebMvcConfig();
}
}

@ -1,37 +0,0 @@
/*
* Copyright 2013-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.cloud.routing.web;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author HH
* @since 2.2.10-RC1
*/
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private WebMvcInterceptor webMvcInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(webMvcInterceptor);
}
}

@ -1,46 +0,0 @@
/*
* Copyright 2013-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.cloud.routing.web;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.cloud.routing.util.RequestContext;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor;
/**
* @author HH
* @since 2.2.10-RC1
*/
public class WebMvcInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) {
RequestContext.setRequest(request);
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, @Nullable Exception ex) {
RequestContext.removeRequest();
}
}

@ -2,5 +2,4 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.alibaba.cloud.routing.RoutingAutoConfiguration,\
com.alibaba.cloud.routing.feign.RoutingFeignInterceptorAutoConfiguration,\
com.alibaba.cloud.routing.ribbon.RoutingLoadBalanceRuleAutoConfiguration,\
com.alibaba.cloud.routing.web.WebMvcAutoConfiguration,\
com.alibaba.cloud.routing.RoutingPropertiesAutoConfiguration

Loading…
Cancel
Save