public void executeTask() {
    String lockKey = "task_lock_key";
    String lockValue = UUID.randomUUID().toString();
    long lockTimeout = 60; // 锁超时时间60秒
 
    // 尝试获取分布式锁
    if (redisTemplate.opsForValue().setIfAbsent(lockKey, lockValue, lockTimeout, TimeUnit.SECONDS)) {
        try {
            // 执行任务逻辑
            doTask();
        } finally {
            // 释放锁,确保即使任务执行异常也能释放锁
            if (lockValue.equals(redisTemplate.opsForValue().get(lockKey))) {
                redisTemplate.delete(lockKey);
            }
        }
    } else {
        // 其他实例已获取锁,本次任务不执行或等待下次调度
    }
}
 
private void doTask() {
    // 实际的任务执行代码
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.