Ich habe eine Feder-Framework-basierte Anwendung mit AnnotationConfigApplicationContext
erstellt.Warum können @PostConstruct und @Retryable nicht zusammen verwendet werden?
Eine Bean hat eine init-Methode, die eine Verbindung zu einem externen Dienst herstellt. Dies kann mit annotiert werden, um automatisch zu starten, sobald die Bean gestartet ist, was funktioniert.
Um irgendwelche Ausnahmen beim Erstellen dieser Verbindung zu behandeln, möchte ich, dass meine Init-Methode bis zu 5 mal wiederholt, wenn eine Ausnahme abgefangen wird. Wenn ich die Methode mit und @Retryable
kommentieren sehe ich die Ausnahme wird einmal geworfen und das Programm beendet - Es scheint @Retryable
hat keine Wirkung.
Ich habe @EnableRetry
in der Konfigurationsklasse korrekt zusammen mit @Configuration
verwendet. Ich habe eine andere Methode B auf der gleichen Bohne erstellt, die als retryable annotiert ist. Wenn diese Methode aufgerufen wird, nachdem die Bean instanziiert wurde, kann ich sehen, dass die Methode wie erwartet wiederholt wird, wenn eine Ausnahme ausgelöst wird.
Meine Gedanken, warum dies nicht funktioniert, ist möglicherweise etwas aspektbezogen oder das Postconstruct passiert bevor das spring-retry Element angehängt wird?
Gibt es tatsächlich eine bessere Möglichkeit, eine Initialisierungsmethode zu verwenden, die Ausnahmen behandeln kann und über Annotationen erneut versucht werden kann - anstatt programmgesteuert in der Methode zu versuchen?
Edit: Ich stimme jetzt zu, dass die Erstellung von Verbindungen zu externen Diensten nicht über @Postconstruct
erfolgen soll. Dies kann verhindern, dass der gesamte Kontext initialisiert wird, wenn die Versuche fehlschlagen, was nachteilige Auswirkungen haben kann.
Dies beantwortet jedoch noch nicht die Frage, welcher Teil des Spring Frameworks diese beiden Annotationen nicht in Verbindung bringt.
dieser Beitrag erklären besser https://stackoverflow.com/a/41856170/3309466 –