微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

自动装配参数作为bean声明参数

如何解决自动装配参数作为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 举报,一经查实,本站将立刻删除。