== One lock, two holders: what usingDbTime() prevents == lockAtMostFor = 30s, both callers ask for the same lock name. JdbcTemplateLockProvider WITHOUT usingDbTime() node with a correct clock : acquired node with a clock 40s fast : ACQUIRED -- two holders at the same time JdbcTemplateLockProvider WITH usingDbTime() node with a correct clock : acquired node with a clock 40s fast : refused Without usingDbTime() the expiry comparison happens against the calling JVM's clock, so a node that is ahead by more than lockAtMostFor considers every live lock expired. With it, both the write and the comparison happen in the database, and there is only one clock in the system.