distributed-locking
RFC-44 compliant distributed locking patterns for Java services. Covers PostgreSQL advisory locks and Redis-based locking, migration workflows, and common patterns. Use when implementing or migrating distributed locking mechanisms.
Installation
Suivez les instructions du dépôt pour votre agent. Consultez les fichiers et dépendances avant l’installation.
Voir la source ↗GuidesInstructions
Distributed Locking
RFC-44 compliant distributed locking patterns for Java services.
When to use this skill
- Implementing distributed locking for scheduled jobs
- Migrating from legacy locking mechanisms
- Choosing between PostgreSQL and Redis locking
- Migrating from Fabric8 leader election
- Migrating from incubated in-repo libraries
Skill Contents
Sections
- When to use this skill (L24-L31)
- Quick Start (L54-L96)
- Implementation Options (L97-L107)
- Common Patterns (L108-L130)
- References (L131-L139)
- Related Rules (L140-L143)
- Related Skills (L144-L149)
Available Resources
📚 references/ - Detailed documentation
Quick Start
1. Add Dependencies (PostgreSQL)
# gradle/libs.versions.toml
[versions]
distributed-locking-api = "2.0.0"
distributed-locking-postgres-jooq = "2.0.0"
[libraries]
distributed-locking-api = { module = "com.bitso.commons:distributed-locking-api", version.ref = "distributed-locking-api" }
distributed-locking-postgres-jooq = { module = "com.bitso.commons:distributed-locking-postgres-jooq", version.ref = "distributed-locking-postgres-jooq" }
2. Create Configuration Bean
@Configuration
public class DistributedLockConfiguration {
@Bean
DistributedLockManager<Long> distributedLockManager(
@Qualifier("write-dslcontext") DSLContext dslContext) {
return new JooqPostgresSessionDistributedLockManager(dslContext);
}
}
3. Use in Scheduled Jobs
@Scheduled(cron = "${job.cron:-}", zone = "UTC")
public void scheduledJob() {
try (var lock = distributedLockManager.tryLock("job-lock")) {
if (!lock.acquired()) {
log.info("Job already running on another instance");
return;
}
doWork();
}
}
Implementation Options
RFC-44 supports two valid locking implementations:
| Implementation | When to Use |
|---|---|
| PostgreSQL Advisory Locks (Default) | Services with PostgreSQL available |
| Redis Locking (Allowed) | Services without PostgreSQL, or with justified Redis use case |
Important: Redis-based locking is NOT deprecated. It is explicitly supported per RFC-44.
Common Patterns
Try-with-resources Pattern
try (var lock = distributedLockManager.tryLock("lock-key")) {
if (!lock.acquired()) {
return;
}
executeTask();
}
Vavr Pattern
Try.withResources(() -> distributedLockManager.tryLock("lock-key"))
.of(lock -> Option.of(lock)
.filter(DistributedLock::acquired)
.onEmpty(() -> log.info("Lock not acquired"))
.peek(l -> doWork()));
References
| Reference | Description |
|---|---|
| references/migration-workflow.md | Step-by-step migration guide |
| references/lock-patterns.md | RFC-44 lock patterns |
| references/redis-integration.md | Redis-based locking setup |
| references/troubleshooting.md | Common issues and solutions |
Related Rules
-
.cursor/rules/java-distributed-locking-rfc44.mdc- Full RFC-44 reference
Related Skills
| Skill | Purpose |
|---|---|
| gradle-standards | Dependency configuration |
| java-testing | Testing lock mechanisms |
Exemples
Consultez les exemples du dépôt source.
Voir la source ↗Historique source
- Date d’indexation
- 2026-01-20
- Mise à jour de l’index
- 2026-01-28
- Branch
- main
Les dates concernent ce répertoire. Consultez le dépôt pour l’historique du code.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!