多实例并发任务锁

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);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读