添加包

<dependency>

    <groupId>net.javacrumbs.shedlock</groupId>
    <artifactId>shedlock-spring</artifactId>
    <version>2.2.0</version>
</dependency>
<dependency>

    <groupId>net.javacrumbs.shedlock</groupId>
    <artifactId>shedlock-provider-jdbc-template</artifactId>
    <version>2.2.0</version>
</dependency>
添加表

CREATE TABLE `shedlock` (
`name` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
`lock_until` timestamp(3) NULL DEFAULT NULL,
`locked_at` timestamp(3) NULL DEFAULT NULL,
`locked_by` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

添加config

import net.javacrumbs.shedlock.core.LockProvider;import net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider;import net.javacrumbs.shedlock.spring.ScheduledLockConfiguration;import net.javacrumbs.shedlock.spring.ScheduledLockConfigurationBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.annotation.EnableScheduling;

import javax.sql.DataSource;import java.time.Duration;

@Configuration@EnableSchedulingpublic class ShedlockConfig {

    @Bean    public LockProvider lockProvider(DataSource dataSource) {        return new JdbcTemplateLockProvider(dataSource);    }

    @Bean    public ScheduledLockConfiguration scheduledLockConfiguration(LockProvider lockProvider) {        return ScheduledLockConfigurationBuilder                .withLockProvider(lockProvider)                .withPoolSize(10)                .withDefaultLockAtMostFor(Duration.ofMinutes(10))                .build();    }}具体的定时任务
import net.javacrumbs.shedlock.core.SchedulerLock;import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.annotation.EnableScheduling;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;

@Component@Configuration@EnableScheduling@EnableSchedulerLock(defaultLockAtMostFor = "PT30S") //重点地方public class MarkRefreshScheduler {

    private final static Logger logger = LoggerFactory.getLogger(MarkRefreshScheduler.class);

    //每周一早上5点执行一次,用户的热度值和hot标识归零    @Scheduled(cron = "0 0/2 * * * ? ")    @SchedulerLock(name = "headNumCronName", lockAtMostFor = 5 * 1000, lockAtLeastFor = 5 * 1000)//重点地方    public void refreshHotSumAndIsOnTop() {        logger.info("begin refreshHotSumAndIsOnTop...");        //do something        logger.info("begin refreshHotSumAndIsOnTop...");

    }}结果

通过修改数据库表中的数据实现锁

里面有四个字段

主键name:每个定时任务的一个名字

locked_at:锁的开始时间

lock_until:锁的结束时间

再定时开始时,会更新这两个时间,在时间之内的定时是不会被执行的

转载于:https://www.cnblogs.com/austinspark-jessylu/p/11238640.html

用shedlock实现分布式定时任务锁相关推荐

  1. SpringBoot(46) 整合ShedLock实现分布式定时任务(redis版)

    文章目录 一.前言 二.SpringBoot整合ShedLock 1.`pom.xml`中引入依赖 2.Shedlock配置类 3.测试数据定时任务 三.本文案例demo源码 一.前言 本文将基于sp ...

  2. shedlock 重启系统报错问题_闲谈ShedLock解决分布式定时任务重复执行问题

    多个服务实例代码是一样,定时任务自然也一样.负载均衡在执行的时候,到达某个节点以后,定时任务都会执行,可以控制的思路就是使用队列的方式去操作. 现有思路有以下两种:将负载均衡的定时任务,从原先的直接执 ...

  3. 借助redis实现分布式定时任务锁

    场景说明:当前系统是分布式的,工程中有定时任务,要求同一时间只有一个任务出发执行,也不要都在一个部署的服务执行. 技术引用:redisson 3.17.7.spring boot 2.2.5 核心代码 ...

  4. SpringBoot2.x整合轻量级分布式定时任务ShedLock3.x的使用详解

    目录 前言 SpringBoot2.x整合轻量级分布式定时任务ShedLock3.x的使用详解 一.关于ShedLock 二.ShedLock的三个核心组件 三.ShedLock使用三步走 四.Spr ...

  5. Spring Boot集成ShedLock分布式定时任务实例

    ShedLock使用大全系列 前言 一.ShedLock是什么? 二.落地实现 1.1 引入依赖包 1.2 配置数据库连接信息 1.3 创建Mysql数据表 1.4 配置LockProvider 1. ...

  6. 【redis】分布式锁实现,与分布式定时任务

    如果你还不知道redis的基本命令与基本使用方法,请看 [redis]redis基础命令学习集合 写在前面 redis辣么多数据结构,这么多命令,具体一点,都可以应用在什么场景呢?用来解决什么具体的问 ...

  7. 使用redis分布式锁+lua脚本实现分布式定时任务控制demo

    2019独角兽企业重金招聘Python工程师标准>>> 分布式系统经常要遇到定时任务执行的问题,不能重复执行,但很多时候又不能统一到一个微服务里面,因为这样就失去了微服务的意义.由于 ...

  8. 几种主流的分布式定时任务,你知道哪些?

    欢迎关注方志朋的博客,回复"666"获面试宝典 单点定时任务 JDK原生 自从JDK1.5之后,提供了ScheduledExecutorService代替TimerTask来执行定 ...

  9. quartz 分布式_6大分布式定时任务对比

    作者 | sharedCode 来源 | blog.csdn.net/u012394095/article/details/79470904 分布式定时任务简介 把分散的,可靠性差的计划任务纳入统一的 ...

  10. 6大分布式定时任务对比

    作者 | sharedCode 来源 | blog.csdn.net/u012394095/article/details/79470904 分布式定时任务简介 把分散的,可靠性差的计划任务纳入统一的 ...

最新文章

  1. LVM和raid结合使用
  2. 25、HTML 文本格式化
  3. 【题解】lugu P4095 Eden的新背包问题
  4. 使用C#删除一个字符串数组中的空字符串
  5. windows server 2008更新补丁失败排错
  6. Java顺序IO性能
  7. 谈一谈对旋转矩阵的理解
  8. jsp获取连接池的实时连接数_一篇看懂数据库连接池概念、原理、运行机制
  9. OpenCV——高效遍历图像(C++版本)
  10. PHP聚合直播盒子网站源码聚合全网直播
  11. 深入C++库分析sync_with_stdio实现
  12. 学习 Java全栈工程师6.0 初学者笔记1 2021-08-09
  13. 经典大数据架构案例:酷狗音乐的大数据平台重构
  14. 北京地区的图像处理公司
  15. C++类的实现 奥特曼打怪兽
  16. OpenCV-Python 中文教程15——OpenCV 中的轮廓
  17. java 下载文件的文件名乱码_JAVA 文件下载时的文件名乱码解决
  18. 服务器开发系列(三)——Linux与Windows操作系统基础功能对比
  19. “假离婚、真套现” 解禁潮将至 拉卡拉上演“一出好戏”
  20. Python零基础入门,纯干货!

热门文章

  1. 【AIgua小白之路】Windows10安装MySQL10.0.15Archive版 【手把手系列】
  2. Part2--排序算法类模板
  3. 探索python--Robert J. Brunner
  4. 剖析 ADO.NET 批处理更新
  5. 条条道路通向SAN iSCSI SAN完全解读之基础篇
  6. react-native 打离线包
  7. 真赞!阿里开源的这款分布式事务框架,不愧为民族之光
  8. 为什么 Redis 单线程能达到百万+QPS?
  9. Linux 平台下 Tomcat 的安装与优化
  10. 疑似 B 站后台源码泄露,ikun 潜入?