是否基于属性(来自配置服务器)override/replace java-based 路由配置?

Did properties-based (from configuration server) override/replace java-based routes config?

我使用服务器在 yml 配置中定义一些路由,这些路由存储在 Consul Key/Value 中。当我尝试使用 Fluent API(基于 Java 的配置)定义路由时,网关无法正常工作并且不会处理此路由。

基于服务器的配置示例:

cloud:
    gateway:
      discovery:
        locator:
          enabled: false
      routes:
        - id: foo
          predicates:
            - Path=/foo/**
          uri: lb:https://bar

并以 Fluent 风格定义路由:

    @Bean
    public RouteLocator routes(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(p -> p
                        .path("/testing_route")
                        .filters(f -> f.addRequestHeader("Hello", "World"))
                        .uri("http://httpbin.org:80"))
                .build();
    }

结果网关 return 所有请求到 /testing_route 路径的 404 状态代码,这意味着此路由不工作。

如果遇到我的问题,我想使用基于 DSL 配置的 ModifyRequestBodyFilter 修改请求正文,这意味着 - 我需要使用两种方式来配置上下文。 实际上这段代码什么都不做。

我们可以在 yml 中结合 RouteLocatorBuilder 和基于 属性 的配置吗?

Spring 启动 2.2.5 发布 Spring Cloud Hoxton.SR3

已在问题线程中回答 https://github.com/spring-cloud/spring-cloud-gateway/issues/1953#issuecomment-705081934

长话短说;博士 需要启用 CachingRouteLocator

 @Bean 
 @Primary 
 @ConditionalOnMissingBean(name = "cachedCompositeRouteLocator") 
 // TODO: property to disable composite? 
 public RouteLocator cachedCompositeRouteLocator(List<RouteLocator> routeLocators) { 
    return new CachingRouteLocator(new CompositeRouteLocator(Flux.fromIterable(routeLocators))); 
 }