Spring / Spring Retry Interview Questions
What is the maxAttemptsExpression attribute and how does it differ from maxAttempts?
Both maxAttempts and maxAttemptsExpression in @Retryable control how many total attempts (including the first try) are made. The difference is that maxAttempts accepts a hardcoded integer literal, while maxAttemptsExpression accepts a Spring Expression Language (SpEL) string that is evaluated at runtime.
| Attribute | Type | Value source | Evaluation time |
|---|---|---|---|
| maxAttempts | int | Compile-time constant | Annotation parsing |
| maxAttemptsExpression | String (SpEL) | Properties, beans, or expressions | Runtime per method call |
Using maxAttempts (static):
@Retryable(maxAttempts = 3)
Using maxAttemptsExpression (dynamic from property):
@Retryable(maxAttemptsExpression = "${app.retry.maxAttempts:3}")
Using maxAttemptsExpression with a bean reference:
@Retryable(maxAttemptsExpression = "@retryConfig.getMaxAttempts()")
You cannot set both maxAttempts and maxAttemptsExpression on the same @Retryable annotation — only one must be used. If both are set, Spring will throw a configuration error.
More Related questions...