用shedlock实现分布式定时任务锁
添加包
<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实现分布式定时任务锁相关推荐
- SpringBoot(46) 整合ShedLock实现分布式定时任务(redis版)
文章目录 一.前言 二.SpringBoot整合ShedLock 1.`pom.xml`中引入依赖 2.Shedlock配置类 3.测试数据定时任务 三.本文案例demo源码 一.前言 本文将基于sp ...
- shedlock 重启系统报错问题_闲谈ShedLock解决分布式定时任务重复执行问题
多个服务实例代码是一样,定时任务自然也一样.负载均衡在执行的时候,到达某个节点以后,定时任务都会执行,可以控制的思路就是使用队列的方式去操作. 现有思路有以下两种:将负载均衡的定时任务,从原先的直接执 ...
- 借助redis实现分布式定时任务锁
场景说明:当前系统是分布式的,工程中有定时任务,要求同一时间只有一个任务出发执行,也不要都在一个部署的服务执行. 技术引用:redisson 3.17.7.spring boot 2.2.5 核心代码 ...
- SpringBoot2.x整合轻量级分布式定时任务ShedLock3.x的使用详解
目录 前言 SpringBoot2.x整合轻量级分布式定时任务ShedLock3.x的使用详解 一.关于ShedLock 二.ShedLock的三个核心组件 三.ShedLock使用三步走 四.Spr ...
- Spring Boot集成ShedLock分布式定时任务实例
ShedLock使用大全系列 前言 一.ShedLock是什么? 二.落地实现 1.1 引入依赖包 1.2 配置数据库连接信息 1.3 创建Mysql数据表 1.4 配置LockProvider 1. ...
- 【redis】分布式锁实现,与分布式定时任务
如果你还不知道redis的基本命令与基本使用方法,请看 [redis]redis基础命令学习集合 写在前面 redis辣么多数据结构,这么多命令,具体一点,都可以应用在什么场景呢?用来解决什么具体的问 ...
- 使用redis分布式锁+lua脚本实现分布式定时任务控制demo
2019独角兽企业重金招聘Python工程师标准>>> 分布式系统经常要遇到定时任务执行的问题,不能重复执行,但很多时候又不能统一到一个微服务里面,因为这样就失去了微服务的意义.由于 ...
- 几种主流的分布式定时任务,你知道哪些?
欢迎关注方志朋的博客,回复"666"获面试宝典 单点定时任务 JDK原生 自从JDK1.5之后,提供了ScheduledExecutorService代替TimerTask来执行定 ...
- quartz 分布式_6大分布式定时任务对比
作者 | sharedCode 来源 | blog.csdn.net/u012394095/article/details/79470904 分布式定时任务简介 把分散的,可靠性差的计划任务纳入统一的 ...
- 6大分布式定时任务对比
作者 | sharedCode 来源 | blog.csdn.net/u012394095/article/details/79470904 分布式定时任务简介 把分散的,可靠性差的计划任务纳入统一的 ...
最新文章
- LVM和raid结合使用
- 25、HTML 文本格式化
- 【题解】lugu P4095 Eden的新背包问题
- 使用C#删除一个字符串数组中的空字符串
- windows server 2008更新补丁失败排错
- Java顺序IO性能
- 谈一谈对旋转矩阵的理解
- jsp获取连接池的实时连接数_一篇看懂数据库连接池概念、原理、运行机制
- OpenCV——高效遍历图像(C++版本)
- PHP聚合直播盒子网站源码聚合全网直播
- 深入C++库分析sync_with_stdio实现
- 学习 Java全栈工程师6.0 初学者笔记1 2021-08-09
- 经典大数据架构案例:酷狗音乐的大数据平台重构
- 北京地区的图像处理公司
- C++类的实现 奥特曼打怪兽
- OpenCV-Python 中文教程15——OpenCV 中的轮廓
- java 下载文件的文件名乱码_JAVA 文件下载时的文件名乱码解决
- 服务器开发系列(三)——Linux与Windows操作系统基础功能对比
- “假离婚、真套现” 解禁潮将至 拉卡拉上演“一出好戏”
- Python零基础入门,纯干货!