About resilience-retry
A guidance skill for choosing and correctly applying retry and resilience patterns in Spring Boot 3. It explains Spring Retry and Resilience4j tradeoffs, proxy behavior, transaction boundaries, and common implementation hazards.
Key features
- 01Spring Retry and Resilience4j selection guidance
- 02Retry attempt-count clarification
- 03Proxy and self-invocation caveats
- 04Transaction-boundary guidance
- 05Idempotency safeguards for writes
Use cases
- 01Choosing retry support for a Boot 3 service
- 02Combining retries with circuit breakers or bulkheads
- 03Reviewing retry behavior inside transactions
- 04Avoiding duplicate effects in payment operations
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ rrezartprebreza/ spring-boot-skills --skill resilience-retryAfter installing, type/resilience-retryin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
agents/openai.yamlexamples/bad-payment-client.javagood-payment-client.javaDetails
From the project READMEResilience and Retry (Boot 3)
Boot 3 does not have Spring Framework 7 core resilience annotations. Choose Spring Retry for simple imperative retry or Resilience4j when you also need circuit breakers, rate limiting, or bulkheads. Keep the dependency and configuration explicit.
@Configuration
@EnableRetry
class RetryConfig { }
@Service
class PaymentClient {
@Retryable(
retryFor = ConnectException.class,
maxAttempts = 4,
backoff = @Backoff(delay = 200, multiplier = 2.0, maxDelay = 2000))
PaymentResult charge(ChargeRequest request) { ... }
@Recover
PaymentResult recover(ConnectException error, ChargeRequest request) { ... }
}
Spring Retry's maxAttempts includes the initial call. Resilience4j is preferable when retry
must be composed with a circuit breaker or bulkhead. Both approaches are proxy-based: self
invocation bypasses advice, and retrying a method inside a rollback-only transaction does not
create a fresh transaction for each attempt.
Gotchas
- Agent uses Framework 7
@EnableResilientMethods- Boot 3 needs Spring Retry or Resilience4j. - Agent confuses
maxAttemptswith retry count - Spring Retry includes the initial call. - Agent adds
@Recoverto Resilience4j - recovery must be modeled with a fallback or caller handling. - Agent retries a self-invoked method - call through a Spring proxy.
- Agent retries inside a transaction expecting a fresh transaction - move retry outside the transactional bean.
- Agent retries non-idempotent writes without an idempotency key - protect payment and command operations.