美文网首页Spring
Spring集成分布式锁ShedLock

Spring集成分布式锁ShedLock

作者: 幽游不想吃饭 | 来源:发表于2020-03-24 18:33 被阅读0次

    ShedLock作用

    SchedulerLock的作用,确保任务在同一时刻最多执行一次。如果一个任务已经在一个节点上执行,则在其他节点上的执行不会等待,只需跳过它即可。
    ShedLock通过外部存储实现锁,包括数据库、Redis、MongoDB、ZooKeeper等。本文以Redis作为存储为例。

    实现过程

    引入依赖

    <dependency>
            <groupId>net.javacrumbs.shedlock</groupId>
            <artifactId>shedlock-spring</artifactId>
            <version>2.5.0</version>
        </dependency>
        <dependency>
            <groupId>net.javacrumbs.shedlock</groupId>
            <artifactId>shedlock-provider-redis-spring</artifactId>
            <version>2.5.0</version>
        </dependency>
    

    增加配置类

    //标识该类为配置类
    @Configuration
    //开启定时器
    @EnableScheduling
    //开启定时任务锁,并设置默认锁最大时间为5分钟(PT为固定格式,M为时间单位)
    @EnableSchedulerLock(defaultLockAtMostFor = "PT5M")
    public class ShedLockConfig {
    //初始化锁提供者,使用Redis作为外部存储
    @Bean
    public LockProvider lockProvider(RedisTemplate redisTemplate) {
        return new RedisLockProvider(redisTemplate.getConnectionFactory());
       }
    }
    

    创建定时任务

    public class AutoRevokeScheduler{
        //定时器时间配置 cron表达式
        @Scheduled(cron = "*/10 * * * * ?")
        //标识使用分布式锁
        @SchedulerLock(name = "assignExpireOrderSchedule")
        public void expireOrderSchedule() {
                log.info("执行方法HailingScheduler-assignExpireOrderSchedule, " +
                        "耗时=" + (System.currentTimeMillis() - t1) + "ms");
        }
     }
    

    相关文章

      网友评论

        本文标题:Spring集成分布式锁ShedLock

        本文链接:https://www.haomeiwen.com/subject/vmrayhtx.html