Spring / Spring Retry Interview Questions
How does Spring Retry handle exceptions that are not in the retryFor list?
When an exception is thrown that is not listed in retryFor (or include in older versions) and is not an Exception.class default match, Spring Retry treats it as a non-recoverable failure and immediately rethrows it without retrying, regardless of how many attempts remain.
This behavior is intentional: Spring Retry assumes that if a specific exception type is thrown and it was not declared as retryable, it likely represents a permanent error (like a validation failure or a programming bug) where retrying would be pointless or harmful.
Example:
@Retryable(retryFor = { IOException.class }, maxAttempts = 5) public void processFile(String path) throws IOException { // If IllegalArgumentException is thrown here, // Spring Retry will NOT retry â it rethrows immediately }
If you want to retry all exceptions, you can explicitly declare:
@Retryable(retryFor = Exception.class)
Or use the noRetryFor attribute to block only specific types while letting all others retry. The exception hierarchy matters: if retryFor = IOException.class, then subclasses like SocketTimeoutException are also retried since they extend IOException.
More Related questions...