SpringBoot(46) 整合ShedLock实现分布式定时任务(redis版)
文章目录
- 一、前言
- 二、SpringBoot整合ShedLock
- 1、`pom.xml`中引入依赖
- 2、Shedlock配置类
- 3、测试数据定时任务
- 三、本文案例demo源码
一、前言
本文将基于springboot2.4.0整合ShedLock实现分布式定时任务(redis版)
https://github.com/lukas-krecan/shedlock
二、SpringBoot整合ShedLock
温馨小提示:redis相关配置省略,若有需要参考demo源码即可。
1、pom.xml
中引入依赖
<!-- shedlock: 分布式定时任务锁 -->
<!-- https://mvnrepository.com/artifact/net.javacrumbs.shedlock/shedlock-spring -->
<dependency><groupId>net.javacrumbs.shedlock</groupId><artifactId>shedlock-spring</artifactId><version>4.29.0</version>
</dependency>
<!-- 使用redis做分布式任务 -->
<!-- https://mvnrepository.com/artifact/net.javacrumbs.shedlock/shedlock-provider-redis-spring -->
<dependency><groupId>net.javacrumbs.shedlock</groupId><artifactId>shedlock-provider-redis-spring</artifactId><version>4.29.0</version>
</dependency>
2、Shedlock配置类
@Configuration
// 开启定时器
@EnableScheduling
// 开启定时任务锁,并设置默认锁最大时间为30分钟(PT为固定格式,M为时间单位-分钟)
@EnableSchedulerLock(defaultLockAtMostFor = "PT30M")
public class ShedlockConfig {@Value("${spring.profiles.active}")private String env;/*** 使用redis存储*/@Beanpublic LockProvider lockProvider(RedisTemplate redisTemplate) {// keyPrefix: redis key的前缀// env和keyPrefix 主要用于区分数据来源,保证最终redis-key在使用时不串用即可 ex=> keyPrefix:dev:scheduledTaskNamereturn new RedisLockProvider(redisTemplate.getConnectionFactory(), env, "keyPrefix");}}
3、测试数据定时任务
@Slf4j
@Component
public class Timer {/*** 每5秒执行一次** @SchedulerLock 注解参数* name:锁的名称,同一时间只能执行一个同名的任务* lockAtMostFor:该属性指定在执行节点死亡的情况下应保持锁定多长时间。这只是一个回退,在正常情况下,一旦任务完成就会释放锁。 您必须设置lockAtMostFor一个比正常执行时间长得多的值。如果任务花费的时间超过 lockAtMostFor所产生的行为可能是不可预测的(多个进程将有效地持有锁)* lockAtLeastFor:该属性指定应保留锁的最短时间。它的主要目的是在节点之间的任务和时钟差异非常短的情况下防止从多个节点执行。* <p>* 通过设置lockAtMostFor我们确保即使节点死亡也会释放锁,通过设置lockAtLeastFor 我们确保它在5s内不会执行超过一次。请注意,这lockAtMostFor只是一个安全网,以防执行任务的节点死亡,因此将其设置为明显大于最大估计执行时间的时间。 如果任务花费的时间超过lockAtMostFor,它可能会再次执行并且结果将是不可预测的(更多的进程将持有锁)。*/@Scheduled(cron = "*/5 * * * * ?")@SchedulerLock(name = "scheduledTaskName", lockAtMostFor = "4s", lockAtLeastFor = "4s")public void printCurrentTime() {log.info("现在时间:【{}】", DateTime.now());}}
自己启动项目运行测试即可…
redis-key
三、本文案例demo源码
https://gitee.com/zhengqingya/java-workspace
今日分享语句:
至于未来会怎样,要走下去才知道,反正路还很长,天总会亮。
SpringBoot(46) 整合ShedLock实现分布式定时任务(redis版)相关推荐
- shedlock 重启系统报错问题_闲谈ShedLock解决分布式定时任务重复执行问题
多个服务实例代码是一样,定时任务自然也一样.负载均衡在执行的时候,到达某个节点以后,定时任务都会执行,可以控制的思路就是使用队列的方式去操作. 现有思路有以下两种:将负载均衡的定时任务,从原先的直接执 ...
- SpringBoot与quartz框架实现分布式定时任务
前言 quartz的分布式调度策略是以数据库为边界资源的一种异步策略.各个调度器都遵守一个基于数据库锁的操作规则从而保证了操作的唯一性. 在quartz的集群解决方案里有张表scheduler_loc ...
- 视频教程- 19年录制Redis实战教程 高可用秒杀分布式锁布隆过滤器实战 SpringBoot教程整合-Java
19年录制Redis实战教程 高可用秒杀分布式锁布隆过滤器实战 SpringBoot教程整合 7年的开发架构经验,曾就职于国内一线互联网公司,开发工程师,现在是某创业公司技术负责人, 擅长语言有nod ...
- 第五章 - 分布式定时任务框架ElasticJob之SpringBoot整合SimpleJob作业(实战一)
系列文章目录 第一章 - 分布式定时任务框架ElasticJob之JavaApi整合Simple作业 第二章 - 分布式定时任务框架ElasticJob之JavaApi整合DataflowJob作业 ...
- SpringBoot2.x整合轻量级分布式定时任务ShedLock3.x的使用详解
目录 前言 SpringBoot2.x整合轻量级分布式定时任务ShedLock3.x的使用详解 一.关于ShedLock 二.ShedLock的三个核心组件 三.ShedLock使用三步走 四.Spr ...
- SpringBoot:整合Redis(概述,数据类型,持久化,RedisTemplate)
1,Redis概述 1.1,Redis基本概念 在传统的Java Web项目中,使用数据库进行存储数据,但是有一些致命的弊端,这些弊端主要来自于性能方面.比如一些商品抢购的场景,或者是主页访问量瞬间较 ...
- springboot:整合redis之消息队列
文章目录 springboot:整合redis之消息队列 一.项目准备 二.配置类 三.redis中list数据类型 定时器监听队列 运行即监控队列 四.发布/订阅模式 RedisConfig中添加监 ...
- springBoot+dubbo整合Redis - 脚手架系列(三)
1.介绍 Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库. Redis 可以存储键和五种不同 ...
- Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...
最新文章
- 初看Windows Media Center
- Android WebView 支持H5的定位Js
- python工具包_python 工具包
- thinkphp5基本的一些操作/API友好/获取请求信息(Request)/判断请求类型(GET...)/验证参数数据(Validate)/连接数据库/原生sql语句查询
- /etc/fstab和/etc/mtab的区别!
- linux怎么让cat运行,使用lolcat让你的Linux命令行出现七彩虹
- LuckyFrame执行Web自动化用例
- ACM HDU 2516 取石子游戏(博弈)
- python操作Access .mdb数据库环境配置
- 微博 用户画像_面向新浪微博的用户画像研究
- 赛道和资本的玩儿法已经过气,SaaS公司活下去还能靠什么?
- 支持自动识别快递公司批量查询物流、一键导出
- 手机显示主服务器连接异常怎么办,手机主服务器连接配置异常
- 比chatgpt稍逊的ai问答网站phind,专用于编写代码
- HB100多普勒雷达+STM32L476VGTx测速系统的电路设计(滤波放大比较器)
- linux下,matplotlib遇到的相关问题以及解决方法
- [CodeForces 332B]Maximum Absurdity[DP]
- Unity最简单的消息中心
- Kotlin 使用 Spring WebFlux 实现响应式编程
- 量子计算(9)编程实践1:构造贝尔态
热门文章
- 佳能7款PL卡口电影镜头发布在即
- 用Python做的大航海时代ol划船按键器
- 会计学原理学习笔记——第一章——总论(1.4会计职能)
- Linux上网本和XP,上网本Linux系统改装XP系统的经验分享.pdf
- opencv答题卡识别 (一)
- ibm x201 怎么清理内部_联想 Thinkpad x201i怎么拆机清理风扇灰尘?_硬件教程
- 写一个trim函数,兼容IE firefox chrome(正则)
- vue+ts全局变量
- android手机应用移到tv,这些电视APP装进手机同样好用(附安装方法)
- <Linux基础I/O(1)>——《Linux》