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() {
// 实际的任务执行代码
}