J'ai un nouvel aspect que je voudrais appliquer @Around
une méthode de service annotée avec @HystrixCommand
. En raison de l'annotation, le HystrixCommandAspect
est automatiquement appliqué.Commande d'aspect tiers au printemps
Cependant, HystrixCommandAspect
ne définit pas de @Order
, ce qui, je le soupçonne, signifie qu'il est par défaut Integer.MAX_VALUE
(c'est-à-dire qu'il doit être exécuté en dernier). J'ai besoin que mon aspect s'exécute en dernier car le HystrixCommandAspect
exécute la méthode de service sur un thread différent et mon aspect doit s'exécuter sur ce thread (la raison n'est probablement pas importante ici, mais cela implique le stockage local de threads).
Il semble que lorsqu'il y a une égalité dans @Order
, l'ordre est en quelque sorte déterminé par le balayage des composants de Spring. Y at-il un moyen de spécifier manuellement l'ordre que Spring devrait appliquer ces aspects (étant donné que je ne peux pas changer le @Order
de HystrixCommandAspect
)?
J'ai creusé un peu plus et je soupçonne que ceci est lié à l'auto-configuration de spring boot. Hystrix définit ses propres springfactory, qui référence HystrixCircuitBreakerConfiguration, exposant un bean hystrixCommandAspect. Je suis capable de remplacer ce bean avec ma propre classe de configuration (le override ne semble fonctionner que si j'utilise aussi la configuration automatique pour ma config), qui est un copier-coller de l'aspect de Hystrix avec une annotation @Order. Cependant, ma deuxième classe d'aspect ne semble jamais être ajoutée, que j'utilise la configuration automatique pour l'ajouter ou non. – nmittler
Il s'avère que 'HystrixCommandAspect' appelle directement la méthode plutôt que de procéder à' JoinPoint'. C'est pourquoi l'aspect qui suit n'est jamais invoqué. J'ai soulevé un [bug Hystrix] (https://github.com/Netflix/Hystrix/issues/1684). – nmittler