ai-observability
Use when adding Spring AI-specific model observations, token usage, latency, externally configured cost attribution, advisor…
Use when adding retries, backoff, or concurrency protection to Spring Boot 3 / Spring Framework 6 services. Covers Spring Retry or Resilience4j selection, proxy behavior, and transaction limits.
Claude Code
$ npx -y skills add rrezartprebreza/spring-boot-skills --skill resilience-retry --agent claude-code
Codex
$ npx skills add rrezartprebreza/spring-boot-skills --skill resilience-retry -a codex -y
Cursor
$ npx skills add rrezartprebreza/spring-boot-skills --skill resilience-retry -a cursor -y
Gemini CLI
$ npx skills add rrezartprebreza/spring-boot-skills --skill resilience-retry -a gemini-cli -y
GitHub Copilot
$ npx skills add rrezartprebreza/spring-boot-skills --skill resilience-retry -a github-copilot -y
OpenCode
$ npx skills add rrezartprebreza/spring-boot-skills --skill resilience-retry -a opencode -y
Windsurf
$ npx skills add rrezartprebreza/spring-boot-skills --skill resilience-retry -a windsurf -y
name: resilience-retry description: > Use when adding retries, backoff, or concurrency protection to Spring Boot 3 / Spring Framework 6 services. Covers Spring Retry or Resilience4j selection, proxy behavior, and transaction limits.
Boot 3 does not have Spring Framework 7 core resilience annotations. Preserve an existing Spring Retry or Resilience4j integration when fixing behavior; do not silently replace it. [Spring Retry is archived](https://github.com/spring-attic/spring-retry), so the example below is for compatibility with existing Boot 3 applications, not a new-project default. For new retry infrastructure, evaluate a maintained Boot-3-compatible library such as Resilience4j and its exact Java/framework requirements. Keep dependencies explicit.
@Configuration
@EnableRetry
class RetryConfig { }
@Service
class CatalogClient {
@Retryable(
retryFor = ConnectException.class,
maxAttempts = 4,
backoff = @Backoff(delay = 200, multiplier = 2.0, maxDelay = 2000))
CatalogItem find(UUID id) { ... } // idempotent read
@Recover
CatalogItem recover(ConnectException error, UUID id) { throw new CatalogUnavailableException(error); }
}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.
Retry only failures approved for that operation, not arbitrary `Exception`.
provider-supported idempotency and the same key and payload on every attempt. Reconcile uncertain outcomes; never turn exhaustion into a fabricated successful payment.
caller's deadline. Per-attempt connect/read timeouts are not a total operation deadline. A retry timeout is not a mechanism for killing an already-running blocking call.
Do not layer independent retries at gateway, HTTP client and service without a shared budget.
according to the API contract. Honor bounded `Retry-After` for 429/503 only when policy permits; do not keep a request thread asleep beyond the caller's deadline.
The [CatalogRetryService](templates/CatalogRetryService.java) preserves Spring Retry for an existing application and requires `spring-retry` plus Spring AOP/AspectJ support. It is an executable, three-attempt read example, used with the companion HTTP-client adapter. It deliberately does not implement 429 scheduling or a total deadline. Tests cover transient recovery, exhaustion, permanent errors and interruption through the actual Spring proxy. Its delays are illustrative; choose production values from the downstream latency budget.
The repository fixture targets Boot 3.5.16 with Java 17/21 and checks bounded attempts through real Spring proxies; not a complete deadline-aware payment workflow. Check the [coverage matrix](https://github.com/rrezartprebreza/spring-boot-skills/blob/main/verification/MATRIX.md) before treating another minor version or an illustrative snippet as verified.
Production-grade Claude Code and Codex skills for Spring Boot developers
Use when adding Spring AI-specific model observations, token usage, latency, externally configured cost attribution, advisor…
Use when versioning Spring MVC or WebFlux APIs in Spring Boot 3 / Spring Framework 6. Covers explicit URL, header, and media-type…
Use when introducing or correcting grouped Spring Boot configuration, typed property binding, validation, profiles or secret…
Use when packaging a Spring Boot 3 application as an OCI image or GraalVM native executable. Covers buildpacks, layered images,…
Use when evolving aggregate invariants, value objects or domain events in an existing DDD-style Spring Boot 3 application, or…
Use when implementing Kafka, RabbitMQ, Pulsar, or JMS producers and consumers in Spring Boot 3. Covers event contracts,…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.