### SpringCloudGateway(三)-SpringCloudGateWay的路由加载和配置获取

/ 默认分类 / 0 条评论 / 998浏览

SpringCloudGateway(三)-SpringCloudGateWay的路由加载和配置获取

默认的加载路由机制为读取配置文件获取

上一篇文章我们介绍了RoutePredicateHandlerMapping,其中会调用的方法如下:

	protected Mono<Route> lookupRoute(ServerWebExchange exchange) {
		return this.routeLocator.getRoutes()

这里的 private final RouteLocator routeLocator;默认加载的是容器中的实现类

// TODO: rename to Routes?
public interface RouteLocator {

	Flux<Route> getRoutes();

}
public class RouteDefinitionRouteLocator
		implements RouteLocator, BeanFactoryAware, ApplicationEventPublisherAware {
    	    private final RouteDefinitionLocator routeDefinitionLocator;    
		}
public interface RouteDefinitionLocator {

	Flux<RouteDefinition> getRouteDefinitions();

}

该接口的实现类如下

如果我们没有自己实现,那么默认加载的是PropertiesRouteDefinitionLocator,也就是从配置文件中读取路由

	@Bean
	@ConditionalOnMissingBean
	public PropertiesRouteDefinitionLocator propertiesRouteDefinitionLocator(
			GatewayProperties properties) {
		return new PropertiesRouteDefinitionLocator(properties);
	}

一般配置的时候是这样的:

    gateway:
      routes:
        - id: id-service-test
          uri: lb://service-test
          predicates:
            - Path=/*/service_test/**

这的predicates即为路由判断机制,spring官方文档是这样描述的: 配置判断机制由过滤器名称识别,后跟一个等号(=),然后是由逗号分隔参数值(,)。 官方提供的路由判断机制有很多种方式,详细如下

路由的读取,默认是通过读配置文件的方式,下面是官方文档中的一句话

By default, a PropertiesRouteDefinitionLocator loads properties by using Spring Boot’s @ConfigurationProperties mechanism. The earlier configuration examples all use a shortcut notation that uses positional arguments rather than named ones. The following two examples are equivalent:

版本为2.2.7,就是说默认的配置方式以及足够大多数情况下使用了,但是未来还会支持从缓存和数据库获取路由的方式,当然,网上也有一些自己实现的使用redis来实现动态路由的方法
参考: redis实现路由获取

路由配置 使用javaconfig 1 路由配置 使用javaconfig 2 路由配置 使用javaconfig 3