电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

SpringBoot 集成 ShedLock 分布式鎖的示例詳解

瀏覽:5日期:2023-12-13 09:57:18
目錄一:ShedLock 簡介二:配置maven 依賴三:SchedulerLock 基于 Redis 的配置四:在啟動類中添加 @EnableScheduling 標簽五:test 測試案例一:ShedLock 簡介

ShedLock是一個在分布式環境中使用的定時任務框架,用于解決在分布式環境中的多個實例的相同定時任務在同一時間點重復執行的問題。ShedLock確保計劃的任務最多同時執行一次。如果一個任務正在一個節點上執行,它會獲得一個鎖,該鎖將阻止從另一個節點(或線程)執行同一任務。請注意,如果一個任務已經在一個節點上執行,則在其他節點上的執行不會等待,只是將其跳過。。簡單來說,ShedLock本身只做一件事情:保證一個任務最多同時執行一次。所以如官網所說的,ShedLock不是一個分布式調度器,只是一個鎖!

注意:ShedLock支持Mongo,Redis,Hazelcast,ZooKeeper以及任何帶有JDBC驅動程序的東西。本例子使用的是基于Redis的方式。之所以不適用基于jdbc存儲的主要原因是考慮到大量數據下的數據庫壓力的原因,若本身基于jdbc等,可直接參考官網給出的提示:

創建對應的表結構。

CREATE TABLE shedlock( name VARCHAR(64), lock_until TIMESTAMP(3) NULL, locked_at TIMESTAMP(3) NULL, locked_by VARCHAR(255), PRIMARY KEY (name))二:配置maven 依賴

<dependency> <groupId>net.javacrumbs.shedlock</groupId> <artifactId>shedlock-spring</artifactId> <version>2.3.0</version></dependency><dependency> <groupId>net.javacrumbs.shedlock</groupId> <artifactId>shedlock-provider-redis-spring</artifactId> <version>2.3.0</version></dependency><!--spring2.0集成redis所需common-pool2 --><!-- 必須加上,jedis依賴此 若項目中已經引入jedis 請忽略此步驟--><!-- spring boot 2.0 的操作手冊有標注 大家可以去看看 地址是:https://docs.spring.io/spring-boot/docs/2.0.3.RELEASE/reference/htmlsingle/ --><dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId></dependency>

添加jedis 依賴 若項目中已經引入jedis 請忽略此步驟

<!--spring2.0集成redis所需common-pool2 --><!-- 必須加上,jedis依賴此 若項目中已經引入jedis 請忽略此步驟--><dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId></dependency>三:SchedulerLock 基于 Redis 的配置

配置 lockProvider 并且開啟 @EnableSchedulerLock 標簽

import net.javacrumbs.shedlock.core.LockProvider;import net.javacrumbs.shedlock.provider.redis.spring.RedisLockProvider;import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisConnectionFactory;/** * @Description SchedulerLock 基于 Redis 的配置 * @Author * @Date 2020/2/22 18:27 **/@Configuration//defaultLockAtMostFor 指定在執行節點結束時應保留鎖的默認時間使用ISO8601 Duration格式//作用就是在被加鎖的節點掛了時,無法釋放鎖,造成其他節點無法進行下一任務//這里默認55s//關于ISO8601 Duration格式用的不到,具體可上網查詢下相關資料,應該就是一套規范,規定一些時間表達方式@EnableSchedulerLock(defaultLockAtMostFor = 'PT55S')public class ShedLockRedisConfig { @Value('${spring.profiles.active}') private String env; @Bean public LockProvider lockProvider(RedisConnectionFactory connectionFactory) {//環境變量 -需要區分不同環境避免沖突,如dev環境和test環境,兩者都部署時,只有一個實例進行,此時會造成相關環境未啟動情況return new RedisLockProvider(connectionFactory, env); }}四:在啟動類中添加 @EnableScheduling 標簽

注意,要在啟動類上添加 @EnableScheduling ,表明開啟定時器服務。若不加定時器是不會起效的。

@SpringBootApplication@EnableSchedulingpublic class EpidemicMessageApplication { public static void main(String[] args) {SpringApplication.run(EpidemicMessageApplication.class, args); }}五:test 測試案例

//區分服務 @Value('${server.port}') private String port;@Scheduled(cron = '0 */1 * * * ?') /** * lockAtLeastForString的作用是為了防止在任務開始之初由于各個服務器同名任務的服務器時間差,啟動時間差等這些造成的一些問題,有了這個時間設置后, * 就可以避免因為上面這些小的時間差造成的一些意外,保證一個線程在搶到鎖后,即便很快執行完,也不要立即釋放,留下一個緩沖時間。 * 這樣等多個線程都啟動后,由于任務已經被鎖定,其他沒有獲得鎖的任務也不會再去搶鎖。注意這里的時間不要設置幾秒幾分鐘,盡量大些 *lockAtMostForString 這個設置的作用是為了防止搶到鎖的那個線程,因為一些意外死掉了,而鎖又始終不被釋放。 * 這樣的話,雖然當前執行周期雖然失敗了,但以后的執行周期如果這里一直不釋放的話,后面就永遠執行不到了。 * 它的目的不在于隱藏任務,更重要的是,釋放鎖,并且查找解決問題。 *至于是否帶有string后綴,只是2種表達方式,數字類型的就是毫秒數,字符串類型的就有自己固定的格式 ,例如:PT30S 30s時間設置,單位可以是S,M,H */ @SchedulerLock(name = 'scheduledController_notice', lockAtLeastForString = 'PT15M', lockAtMostForString = 'PT14M') public StandardResult notice() {try { logger.info(port + '- 執行定時器 scheduledController_notice'); return StandardResult.ok();} catch (Exception e) { logger.error('異常信息:', e); return StandardResult.faild('異常信息', e);} }

SchedulerLock注解說明@SchedulerLock注解一共支持五個參數,分別是

name:用來標注一個定時服務的名字,被用于寫入數據庫作為區分不同服務的標識,如果有多個同名定時任務則同一時間點只有一個執行成功lockAtMostFor:成功執行任務的節點所能擁有獨占鎖的最長時間,單位是毫秒mslockAtMostForString:成功執行任務的節點所能擁有的獨占鎖的最長時間的字符串表達,例如“PT14M”表示為14分鐘,單位可以是S,M,HlockAtLeastFor:成功執行任務的節點所能擁有獨占所的最短時間,單位是毫秒mslockAtLeastForString:成功執行任務的節點所能擁有的獨占鎖的最短時間的字符串表達,例如“PT14M”表示為14分鐘,單位可以是S,M,H

到此這篇關于SpringBoot 集成 ShedLock 分布式鎖的文章就介紹到這了,更多相關SpringBoot 分布式鎖ShedLock內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 大行程影像测量仪-探针型影像测量仪-增强型影像测量仪|首丰百科 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 闸阀_截止阀_止回阀「生产厂家」-上海卡比阀门有限公司 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 中细软知识产权_专业知识产权解决方案提供商 | 浙江华锤电器有限公司_地磅称重设备_防作弊地磅_浙江地磅售后维修_无人值守扫码过磅系统_浙江源头地磅厂家_浙江工厂直营地磅 | 电动卫生级调节阀,电动防爆球阀,电动软密封蝶阀,气动高压球阀,气动对夹蝶阀,气动V型调节球阀-上海川沪阀门有限公司 | 高低温试验箱-模拟高低温试验箱订制-北京普桑达仪器科技有限公司【官网】 | 暖气片十大品牌厂家_铜铝复合暖气片厂家_暖气片什么牌子好_欣鑫达散热器 | 天津电机维修|水泵维修-天津晟佳机电设备有限公司 | 锂电池生产厂家-电动自行车航模无人机锂电池定制-世豹新能源 | 诺冠气动元件,诺冠电磁阀,海隆防爆阀,norgren气缸-山东锦隆自动化科技有限公司 | VOC检测仪-甲醛检测仪-气体报警器-气体检测仪厂家-深恒安科技有限公司 | 防水套管厂家-柔性防水套管-不锈钢|刚性防水套管-天翔管道 | 希望影视-高清影视vip热播电影电视剧免费在线抢先看 | 成都软件开发_OA|ERP|CRM|管理系统定制开发_成都码邻蜀科技 | 激光内雕_led玻璃_发光玻璃_内雕玻璃_导光玻璃-石家庄明晨三维科技有限公司 激光内雕-内雕玻璃-发光玻璃 | 浙江美尔凯特智能厨卫股份有限公司| 丝印油墨_水性油墨_环保油墨油漆厂家_37国际化工 | 代理记账_免费注册公司_营业执照代办_资质代办-【乐财汇】 | 杭州代理记账费用-公司注销需要多久-公司变更监事_杭州福道财务管理咨询有限公司 | 英思科GTD-3000EX(美国英思科气体检测仪MX4MX6)百科-北京嘉华众信科技有限公司 | 吨袋包装机|吨包秤|吨包机|集装袋包装机-烟台华恩科技 | 德国EA可编程直流电源_电子负载,中国台湾固纬直流电源_交流电源-苏州展文电子科技有限公司 | 新型锤式破碎机_新型圆锥式_新型颚式破碎机_反击式打沙机_锤式制砂机_青州建源机械 | 智能案卷柜_卷宗柜_钥匙柜_文件流转柜_装备柜_浙江福源智能科技有限公司 | 舞台木地板厂家_体育运动木地板_室内篮球馆木地板_实木运动地板厂家_欧氏篮球地板推荐 | 拉力机-万能试验机-材料拉伸试验机-电子拉力机-拉力试验机厂家-冲击试验机-苏州皖仪实验仪器有限公司 | 深圳VI设计-画册设计-LOGO设计-包装设计-品牌策划公司-[智睿画册设计公司] | 开业庆典_舞龙舞狮_乔迁奠基仪式_开工仪式-神挚龙狮鼓乐文化传媒 | 合肥花魁情感婚姻咨询中心_挽回爱情_修复婚姻_恋爱指南 | 领先的大模型技术与应用公司-中关村科金 | HV全空气系统_杭州暖通公司—杭州斯培尔冷暖设备有限公司 | 泥沙分离_泥沙分离设备_泥砂分离机_洛阳隆中重工机械有限公司 | 电线电缆厂家|沈阳电缆厂|电线厂|沈阳英联塑力线缆有限公司 | 西子馋火锅鸡加盟-太原市龙城酉鼎餐饮管理有限公司 | 塑料瓶罐_食品塑料瓶_保健品塑料瓶_调味品塑料瓶–东莞市富慷塑料制品有限公司 | 东莞办公家具厂家直销-美鑫【免费3D效果图】全国办公桌/会议桌定制 | 减速机三参数组合探头|TSM803|壁挂式氧化锆分析仪探头-安徽鹏宸电气有限公司 | 针焰试验仪,灼热丝试验仪,漏电起痕试验仪,水平垂直燃烧试验仪 - 苏州亚诺天下仪器有限公司 | 橡胶接头|可曲挠橡胶接头|橡胶软接头安装使用教程-上海松夏官方网站 | 北京西风东韵品牌与包装设计公司,创造视觉销售力! |