多实例并发任务锁
2020-03-30 本文已影响0人
_染123
@Component
public class CleanLogSchedule {
private static final Logger logger = LoggerFactory.getLogger(CleanLogSchedule.class);
public static final String CLEAN_LOG_LOCK_KEY = "cleanLog:lock";
@Autowired
private JedisCluster jedisCluster;
@Autowired
private ServerConfig serverConfig;
@Autowired
private LogDao logDao;
@Scheduled(cron = "${cleanLog.cron:0 0 0 */1 * ?}")
private void process() {
String lockResult = jedisCluster.set(CLEAN_LOG_LOCK_KEY, "lock", "NX", "EX", serverConfig.getCleanLogSchedulerLockTtl());
if (lockResult == null) {
logger.debug("other instances is processing clean log,ignore...");
return;
}
} catch (Exception e) {
logger.error("error process clean log", e);
} finally {
jedisCluster.del(CLEAN_LOG_LOCK_KEY);
}
}