如何解决基于属性来自配置服务器是否覆盖/替换基于Java的路由配置?
我使用服务器在yml配置中定义一些路由,这些路由存储在Consul键/值中。当我尝试使用Fluent API(基于Java的配置)定义路由时,网关无法正常工作,也不会处理该路由。
基于服务器的配置示例:
cloud:
gateway:
discovery:
locator:
enabled: false
routes:
- id: foo
predicates:
- Path=/foo/**
uri: lb:https://bar
并以流利的风格定义路线:
@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();
}
结果,网关将所有请求的404状态代码返回到/ testing_route路径,这意味着该路由不起作用。
如果遇到问题,我想使用ModifyRequestBodyFilter来修改请求正文,它基于DSL配置,这意味着-我需要同时使用两种方法来配置上下文。 实际上,此代码不执行任何操作。
我们可以将RouteLocatorBuilder与yml中基于属性的配置结合吗?
Spring Boot 2.2.5发布 Spring Cloud Hoxton.SR3
解决方法
在问题线程中回答 https://github.com/spring-cloud/spring-cloud-gateway/issues/1953#issuecomment-705081934
TL;博士 需要开启 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)));
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。