Ich möchte eine ernsthafte Wiederholung für den Service-Aktivator nur im Falle einer ConnectionException durchführen, für andere Ausnahmen möchte ich keinen erneuten Versuch oder eine sehr leichte Wiederholung verwenden. Welche Konfiguration kann ich verwenden? Die Essenz meiner Konfiguration ist unten:Ist es möglich, zwei verschiedene Wiederholungsbeans für einen Dienstaktivator zu verwenden, abhängig von einer ausgelösten Ausnahme?
Antwort
Nein, Sie können einen Wiederholungsratschlag nicht zusammen mit anderen verwenden. Die <request-handler-advice-chain>
Strategie besteht darin, einen Rat in einen anderen mit der Reihenfolge zu überführen, wie sie innerhalb der <request-handler-advice-chain>
konfiguriert sind. Also, wenn Sie eine retryAdvice
und dann eine andere erklären, wird die erste nicht erreicht, bis die zweite ihre Arbeit beendet.
sehe ich nicht das ganze Bild noch, wie einfach Ihre Anforderungen zu erreichen, aber ich wirklich sicher, dass Sie mit benutzerdefinierten RetryPolicy
umgehen sollten, in dem Sie eine Ziel Ausnahme über erreichen:
public boolean canRetry(RetryContext context) {
Throwable t = context.getLastThrowable();
...
}
beachten zu diesem nützlichen RetryContext
Objekt.
Es gibt auch interessierten Hook als RetryListener
Abstraktion, mit der Sie einige zusätzliche Attribute in das RetryContext
setzen können. Zum Beispiel in der SI RequestHandlerRetryAdvice
:
public <T, E extends Throwable> boolean open(RetryContext context, RetryCallback<T, E> callback) {
context.setAttribute("message", messageHolder.get());
return true;
}
Meinst du ExceptionClassifierRetryPolicy? Wenn ja, muss ich es mit meiner benutzerdefinierten Klasse überschreiben oder kann ich es in XML konfigurieren? –
1. Sie müssen Ihre eigene 'RetryPolicy' implementieren. Ja 'ExceptionClassifierRetryPolicy' kann als Beispiel für Sie dienen. 2. Sie können es im XML später als reguläres '' konfigurieren und es in 'RetryTemplate' Bean injizieren. –