在之前我们了解的Spring Cloud Gateway配置路由方式有两种方式
1.通过配置文件
spring:
cloud:
gateway:
routes:
- id: test
predicates:
- Path=/ms/test/*
filters:
- StripPrefix=2
uri: http://localhost:9000
2.通过JavaBean
@Bean
public RouteLocator routeLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route(r -> r.path("/ms/test/**")
.filters(f -> f.stripPrefix(2))
.uri("http://localhost:9000"))
.build();
}
但是遗憾的是这两种方式都不支持动态路由,都需要重启服务。 所以我们需要对Spring Cloud Gateway进行改造,在改造的时候我们就需要看看源码了解下Spring Cloud Gateway的路由加载
路由的加载
我们之前分析了路由的加载主要在GatewayAutoConfiguration的 routeDefinitionRouteLocator方法加载的
实际上最终获取的路由信息都是在GatewayProperties这个配置类中
所以我们在动态路由的时候修改GatewayProperties中的属性即可,即
-
List<RouteDefinition> routes
-
List<FilterDefinition> defaultFilters
恰巧Spring Cloud Gateway也提供了相应的get、set方法