如何解决自动装配参数作为bean声明参数
@Bean
public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) {
return builder.routes()
.route(r -> r.path("/employee/**")
.uri("http://localhost:8081/")
.id("employeeModule"))
.build()
但是我想拥有一个动态派生的值,而不是http:://localhost:8081/
,例如:
@Bean
public RouteLocator gatewayRoutes(RouteLocatorBuilder builder,@Autowired val discoveryService: discoveryService) {
return builder.routes()
.route(r -> r.path("/employee/**")
.uri(discoveryService.getHost())
.id("employeeModule"))
这可能吗?我应该如何更改语法以自动连接discoveryService?
解决方法
尝试这样:
RouteLocatorBuilder.Builder routes = builder.routes();
discoveryClient.getServices().forEach(service->routes.route(r -> r.path("/"+service+"/**")
.uri("lb://"+service).id(service)));
return routes.build();
,
您可以执行以下操作:
'MTB' => 'xxxxxxxxxxxxxxxxxxxxxx','BMX' => 'yyyyyyyyyyyyyyyyyyyyyy','TRIAL' => 'zzzzzzzzzzzzzzzzzzzz','TRACK' => 'wwwwwwwwwwwwwwwwwwww',
这将自动连接@Bean
public RouteLocator gatewayRoutes(RouteLocatorBuilder builder,// note the absence of val
@Autowired discoveryService: DiscoveryService) {
return builder.routes()
.route(r -> r.path("/employee/**")
.uri(discoveryService.getHost())
.id("employeeModule"))
(它也必须声明为DiscoveryService
)或,您可以直接调用声明@Bean
的方法,因为Spring将使用CGLIB增强该方法,因此它只会创建一次DiscoveryService
:
DiscoveryService
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。