在之前我们了解的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
List
恰巧Spring Cloud Gateway也提供了相应的get、set方法