自动装配参数作为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