Ich habe einen neuen Aspekt, den ich anwenden möchte @Around
eine Service-Methode mit @HystrixCommand
kommentiert. Aufgrund der Anmerkung wird die HystrixCommandAspect
automatisch angewendet.Bestellung von Dritten Aspekt im Frühjahr
HystrixCommandAspect
definiert jedoch keine @Order
, was bedeutet, dass es standardmäßig Integer.MAX_VALUE
(d. H. Es sollte zuletzt ausgeführt werden). Ich brauche meinen Aspekt, um zuletzt zu laufen, weil die die Service-Methode auf einem anderen Thread ausführt und mein Aspekt auf diesem Thread ausgeführt werden muss (der Grund ist hier wahrscheinlich nicht wichtig, aber es beinhaltet lokalen Thread-Speicher).
Es scheint, dass, wenn es einen Gleichstand in @Order
gibt, die Reihenfolge irgendwie von Frühling Komponente Scan bestimmt wird. Gibt es eine Möglichkeit, die Reihenfolge manuell festzulegen, in der Spring diese Aspekte anwenden soll (da ich die @Order
von HystrixCommandAspect
nicht ändern kann)?
Ich habe etwas mehr graben gemacht und ich vermute, dass dies mit der automatischen Konfiguration des Springbootes zusammenhängt. Hystrix definiert seine eigenen spring.factories, die auf die HystrixCircuitBreakerConfiguration verweisen und eine hystrixCommandAspect-Bean anzeigen. Ich bin in der Lage, diese Bean mit meiner eigenen Konfigurationsklasse zu überschreiben (die Überschreibung scheint nur zu funktionieren, wenn ich auch die automatische Konfiguration für meine Konfiguration verwende), was ein Kopieren und Einfügen des Aspekts von Hystrix mit einer @Order-Anmerkung ist. Meine zweite Aspektklasse scheint jedoch nie hinzugefügt zu werden, unabhängig davon, ob ich die automatische Konfiguration verwende, um sie hinzuzufügen oder nicht. – nmittler
Es stellt sich heraus, dass der 'HystrixCommandAspect' die Methode direkt aufruft, anstatt den' JoinPoint' auszuführen. Aus diesem Grund wird der folgende Aspekt nie aufgerufen. Ich habe einen [Hystrix-Fehler] (https://github.com/Netflix/Hystrix/issues/1684) ausgelöst. – nmittler