Skip to content
Back to skills

Spring Retry

ASecurity

Spring Retry for transparent retry support in Spring applications. Covers @Retryable, @Recover, RetryTemplate, backoff policies, and circuit breakers. USE WHEN: user mentions "spring retry", "@Retryable", "@Recover", "RetryTemplate", "backoff policy", "retry transient failure", "automatic retry" DO NOT USE FOR: circuit breaker patterns - use `spring-cloud-circuitbreaker` skill, message retry - use `spring-kafka` or messaging skill retry topics

  • 31 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 8, 2026
ai-agentsjavaspringtestingapidocumentation

Works with

  • cli
  • api
  • mcp

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add claude-dev-suite/claude-dev-suite --skill spring-retry --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Spring Retry?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Spring Retry
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/claude-dev-suite-spring-retry/badge)](https://www.skillsdirectory.com/skills/claude-dev-suite-spring-retry)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: spring-retry
description: |
  Spring Retry for transparent retry support in Spring applications.
  Covers @Retryable, @Recover, RetryTemplate, backoff policies, and circuit breakers.

  USE WHEN: user mentions "spring retry", "@Retryable", "@Recover", "RetryTemplate",
  "backoff policy", "retry transient failure", "automatic retry"

  DO NOT USE FOR: circuit breaker patterns - use `spring-cloud-circuitbreaker` skill,
  message retry - use `spring-kafka` or messaging skill retry topics
allowed-tools: Read, Grep, Glob, Write, Edit
---
# Spring Retry - Quick Reference

> **Full Reference**: See [advanced.md](advanced.md) for RetryTemplate patterns, custom retry policies, retry listeners, stateful retry, async retry, and testing.

> **Deep Knowledge**: Use `mcp__documentation__fetch_docs` with technology: `spring-retry` for comprehensive documentation.

## Dependencies

```xml
<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
</dependency>
```

## Enable Retry

```java
@SpringBootApplication
@EnableRetry
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
```

## @Retryable Annotation

### Basic Usage
```java
@Retryable(maxAttempts = 3)
public String callExternalApi(String endpoint) {
    return restClient.get(endpoint);
}
```

### With Specific Exceptions
```java
@Retryable(
    retryFor = {ServiceUnavailableException.class, TimeoutException.class},
    noRetryFor = {PaymentDeclinedException.class},
    maxAttempts = 5
)
public PaymentResult processPayment(PaymentRequest request) {
    return paymentGateway.charge(request);
}
```

### With Backoff
```java
@Retryable(
    maxAttempts = 4,
    backoff = @Backoff(
        delay = 1000,       // Initial delay: 1 second
        multiplier = 2,     // Exponential: 1s, 2s, 4s
        maxDelay = 10000    // Max delay: 10 seconds
    )
)
public void sendNotification(Notification notification) {
    notificationClient.send(notification);
}

@Recover
public void recoverNotification(Exception e, Notification notification) {
    log.error("Failed to send notification after retries: {}", notification.getId());
    deadLetterQueue.add(notification);
}
```

## @Recover Method

```java
@Service
public class UserService {

    @Retryable(retryFor = ServiceException.class, maxAttempts = 3)
    public User getUser(Long id) {
        return userClient.findById(id);
    }

    // Must have same return type
    // First parameter can be the exception
    @Recover
    public User recoverGetUser(ServiceException e, Long id) {
        log.warn("Falling back to cached user for id: {}", id);
        return userCache.get(id);
    }

    // Multiple recover methods for different exceptions
    @Recover
    public User recoverGetUserTimeout(TimeoutException e, Long id) {
        return User.unknown(id);
    }
}
```

## Best Practices

| Do | Don't |
|----|-------|
| Use exponential backoff | Fixed rapid retries |
| Set max attempts limit | Retry indefinitely |
| Handle non-retryable exceptions | Retry business errors |
| Log retry attempts | Silent retries |
| Implement recovery fallback | Let retries fail silently |

## When NOT to Use This Skill

- **Circuit breaker** - Use `spring-cloud-circuitbreaker` or Resilience4j
- **Message retry** - Use Kafka retry topics or DLT
- **Non-idempotent operations** - Ensure idempotency first
- **Business errors** - Only retry transient failures

## Anti-Patterns

| Anti-Pattern | Problem | Solution |
|--------------|---------|----------|
| Retry indefinitely | Hangs forever | Set max attempts |
| Fixed rapid retry | Overwhelms service | Use exponential backoff |
| Retrying business errors | Wastes resources | Use noRetryFor |
| No recovery method | Silent failures | Implement @Recover |

## Quick Troubleshooting

| Problem | Diagnostic | Fix |
|---------|------------|-----|
| Retry not happening | Check @EnableRetry | Add to config class |
| @Recover not called | Check method signature | Match return type and params |
| Too many retries | Check maxAttempts | Reduce or add timeout |
| Backoff not working | Check annotation | Verify @Backoff config |

## Production Checklist

- [ ] Appropriate max attempts set
- [ ] Exponential backoff configured
- [ ] Max delay capped
- [ ] Non-retryable exceptions defined
- [ ] Recovery methods implemented
- [ ] Retry listeners for monitoring
- [ ] Metrics on retry counts

## Reference Documentation
- [Spring Retry Reference](https://docs.spring.io/spring-retry/reference/)

Files in this skill

  • SKILL.md4.6 KB
  • advanced.md7.6 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.