java.lang.Object
net.javacrumbs.shedlock.support.StorageBasedLockProvider
net.javacrumbs.shedlock.provider.r2dbc.R2dbcLockProvider
All Implemented Interfaces:
ExtensibleLockProvider, LockProvider

public class R2dbcLockProvider extends StorageBasedLockProvider
Lock provided by plain R2DBC SPI. It uses a table that contains lock_name and locked_until.
  1. Attempts to insert a new lock record. Since lock name is a primary key, it fails if the record already exists. As an optimization, we keep in-memory track of created lock records.
  2. If the insert succeeds (1 inserted row) we have the lock.
  3. If the insert failed due to duplicate key or we have skipped the insertion, we will try to update lock record using UPDATE tableName SET lock_until = :lockUntil WHERE name = :lockName AND lock_until <= :now
  4. If the update succeeded (1 updated row), we have the lock. If the update failed (0 updated rows) somebody else holds the lock
  5. When unlocking, lock_until is set to now.
  • Constructor Details

    • R2dbcLockProvider

      public R2dbcLockProvider(io.r2dbc.spi.ConnectionFactory connectionFactory)
    • R2dbcLockProvider

      public R2dbcLockProvider(io.r2dbc.spi.ConnectionFactory connectionFactory, String tableName)