【发布时间】:2018-03-09 03:21:26
【问题描述】:
我有一个新的方面,我想应用@Around 一个用@HystrixCommand 注释的服务方法。由于注解,HystrixCommandAspect 被自动应用。
但是,HystrixCommandAspect 没有定义@Order,我怀疑这意味着它默认为Integer.MAX_VALUE(即它应该最后执行)。我需要我的切面最后运行,因为HystrixCommandAspect 在不同的线程上执行服务方法,而我的切面需要在该线程上运行(原因在这里可能并不重要,但它涉及线程本地存储)。
似乎当@Order 出现平局时,顺序是由Spring 的组件扫描以某种方式确定的。有没有办法手动指定 Spring 应用这些方面的顺序(鉴于我无法更改 HystrixCommandAspect 的 @Order)?
【问题讨论】:
-
我做了更多的挖掘工作,我怀疑这与 Spring Boot 的自动配置有关。 Hystrix 定义了它自己的 spring.factories,它引用了 HystrixCircuitBreakerConfiguration,暴露了一个 hystrixCommandAspect bean。我可以用我自己的配置类覆盖该 bean(只有当我也为我的配置使用自动配置时,覆盖似乎才有效),这是 Hystrix 方面的复制和粘贴,带有 @Order 注释。然而,我的第二个方面类似乎从未被添加,无论我是否使用自动配置来添加它。
-
原来
HystrixCommandAspect只是直接调用方法而不是继续JoinPoint。这就是为什么从不调用后面的方面。我提出了Hystrix bug。
标签: java spring spring-boot hystrix