u/SelfRobber

idempotency4j - Java/Spring Boot Idempotency Library
▲ 40 r/java

idempotency4j - Java/Spring Boot Idempotency Library

The last couple of months, I ended up implementing idempotency in 2 different Spring Boot projects back to back.

As I was implementing it in the second project, I decided to look up any existing solutions/libraries for Java/Spring Boot, but I honestly couldn't find one that felt clean and flexible enough for what I needed (and what most people probably need).

So I decided to build my own and open source it.

I released it about a month ago:
Repository : https://github.com/josipmusa/idempotency4j
Maven spring boot starter : https://central.sonatype.com/artifact/io.github.josipmusa/idempotency-spring-boot-starter

The goal was to make idempotency implementations feel straightforward and easy, but also to not scope it only to spring boot or a certain storage implementation. The library has a core which can be used on any method with pluggable storage backends. It also has an integration with spring web (servlet-based for now) and a spring boot starter to simplify usage.

Usage example for a spring boot project:

@PostMapping("/payments")
@Idempotent
public ResponseEntity<Payment> createPayment(@RequestBody PaymentRequest request) {
 // Runs exactly once per unique Idempotency-Key value.
 // Subsequent identical requests get the stored response replayed.
 return ResponseEntity.ok(paymentService.charge(request));
}

Right now it supports:

  • Spring MVC (Servlet-based apps)
  • JDBC storage (so it works out of the box with MySQL / PostgreSQL setups most people already have)
  • In-memory storage
  • duplicate request detection
  • replaying previous responses
  • concurrent request protection
  • request fingerprinting
  • configurable TTLs
  • pluggable storage backends

Curious whether others have run into this same problem and whether this library helps solve it for them.
Open to any feedback, suggestions, or reviews.

u/SelfRobber — 7 days ago