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

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

Spring Boot集成ShedLock分布式定時任務的實現示例

瀏覽:2日期:2023-07-14 13:04:02
目錄一、ShedLock是什么?二、落地實現1.1 引入依賴包1.2 配置數據庫連接信息1.3 創建Mysql數據表1.4 配置LockProvider1.5 創建定時Job1.6 主啟動類1.7 執行成功分析1.8 修改表名總結一、ShedLock是什么?

官方地址:github.com/lukas-kreca…

以下是ShedLock鎖提供者,通過外部存儲實現鎖,由下圖可知外部存儲集成的庫還是很豐富的

Spring Boot集成ShedLock分布式定時任務的實現示例

本篇教程我們基于JdbcTemplate存儲為例來使用ShedLock鎖。

二、落地實現1.1 引入依賴包

shedlock所需依賴包:

<dependency> <groupId>net.javacrumbs.shedlock</groupId> <artifactId>shedlock-spring</artifactId> <version>4.23.0</version></dependency> <!--每個外部存儲實例所需依賴包不一樣,這里是jdbc--><dependency> <groupId>net.javacrumbs.shedlock</groupId> <artifactId>shedlock-provider-jdbc-template</artifactId> <version>4.23.0</version></dependency>

JdbcTemplate依賴包:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope></dependency>

web工程依賴包:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>1.2 配置數據庫連接信息

server: port: 9999spring: datasource: url: jdbc:mysql://192.168.31.158:3306/testjdbc?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver type: com.mysql.cj.jdbc.MysqlDataSource1.3 創建Mysql數據表

# MySQL, MariaDBCREATE TABLE shedlock(name VARCHAR(64) NOT NULL, lock_until TIMESTAMP(3) NOT NULL, locked_at TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), locked_by VARCHAR(255) NOT NULL, PRIMARY KEY (name));# PostgresCREATE TABLE shedlock(name VARCHAR(64) NOT NULL, lock_until TIMESTAMP NOT NULL, locked_at TIMESTAMP NOT NULL, locked_by VARCHAR(255) NOT NULL, PRIMARY KEY (name));# OracleCREATE TABLE shedlock(name VARCHAR(64) NOT NULL, lock_until TIMESTAMP(3) NOT NULL, locked_at TIMESTAMP(3) NOT NULL, locked_by VARCHAR(255) NOT NULL, PRIMARY KEY (name));# MS SQLCREATE TABLE shedlock(name VARCHAR(64) NOT NULL, lock_until datetime2 NOT NULL, locked_at datetime2 NOT NULL, locked_by VARCHAR(255) NOT NULL, PRIMARY KEY (name));# DB2CREATE TABLE shedlock(name VARCHAR(64) NOT NULL PRIMARY KEY, lock_until TIMESTAMP NOT NULL, locked_at TIMESTAMP NOT NULL, locked_by VARCHAR(255) NOT NULL);

Spring Boot集成ShedLock分布式定時任務的實現示例

1.4 配置LockProvider

/** * @description: Shedlock集成Jdbc配置類 * @author: DT * @date: 2021/5/22 0:07 * @version: v1.0 */// 標識該類為配置類@Configuration// //開啟定時器@EnableScheduling// 開啟定時任務鎖,指定一個默認的鎖的時間30秒@EnableSchedulerLock(defaultLockAtMostFor = 'PT30S')public class ShedlockJdbcConfig { /** * 配置鎖的提供者 */ @Bean public LockProvider lockProvider(DataSource dataSource) {return new JdbcTemplateLockProvider(JdbcTemplateLockProvider.Configuration.builder().withJdbcTemplate(new JdbcTemplate(dataSource)).usingDbTime().build()); }}1.5 創建定時Job

/** * @description: 開啟分布式鎖定時任務 * @author: DT * @date: 2021/5/22 0:23 * @version: v1.0 */@Component@CommonsLogpublic class TimeTaskJob { private static Integer count = 1; // @SchedulerLock的作用是保證當前定時任務的方法執行時獲得鎖,忽略其他相同任務的執行 // name必須要指定,ShedLock就是根據這個name進行相同任務判定的 // name:定時任務的名字,就是數據庫中的主鍵(name) // lockAtMostFor:鎖的最大時間單位為毫秒 // lockAtLeastFor:鎖的最小時間單位為毫秒 /** * 任務1每5秒執行一次 * lockAtLeastFor:雖然,定時任務是每隔5秒執行一次,但是,分布式鎖定義的是:每次任務要鎖住20秒,20秒是持有鎖的最小時間,必須等20秒后才釋放鎖,并且確保在20秒鐘內,該任務不會運行超過1次; * lockAtMostFor:鎖最大持有時間30秒,表示最多鎖定30秒鐘,主要用于防止執行任務的節點掛掉(即使這個節點掛掉,在30秒鐘后,鎖也被釋放),一般將其設置為明顯大于任務的最大執行時長;如果任務運行時間超過該值(即任務30秒鐘沒有執行完),則該任務可能被重復執行。 */ @Scheduled(cron = '0/5 * * * * ? ') @SchedulerLock(name = 'testJob1',lockAtLeastFor = '20000', lockAtMostFor = '30000') public void scheduledTask1() {log.info(Thread.currentThread().getName() + '->>>任務1執行第:' + (count++) + '次'); } /** * 任務2每5秒執行一次 */ @Scheduled(cron = '0/5 * * * * ? ') @SchedulerLock(name = 'testJob2') public void scheduledTask2() {log.info(Thread.currentThread().getName() + '->>>任務2執行第:' + (count++) + '次'); }}1.6 主啟動類

@SpringBootApplicationpublic class JdbcApplication { public static void main(String[] args) { SpringApplication.run(JdbcApplication.class, args); }}1.7 執行成功分析

可以看到兩個任務交替執行,并且我們的count每次自加1都是有序的。但是這里說明一下ShedLock是單線程執行的。

Spring Boot集成ShedLock分布式定時任務的實現示例

1.8 修改表名

shedLock支持關系型數據庫,以mysql為例,配置mysql以及表名;shedLock默認表名為shedlock,可以設置自定義表名。

Spring Boot集成ShedLock分布式定時任務的實現示例

總結

核心思想:通過對公用的數據庫中的某個表進行記錄和加鎖,使得同一時間點只有第一個執行定時任務并成功在數據庫表中寫入相應記錄的節點能夠成功執行而其他節點直接跳過該任務。

以上就是Spring Boot集成ShedLock分布式定時任務的實現示例的詳細內容,更多關于Spring Boot集成ShedLock分布式定時任務的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
主站蜘蛛池模板: 大米加工设备|大米加工机械|碾米成套设备|大米加工成套设备-河南成立粮油机械有限公司 | 金属波纹补偿器厂家_不锈钢膨胀节价格_非金属伸缩节定制-庆达补偿器 | 篮球架_乒乓球台_足球门_校园_竞技体育器材_厂家_价格-沧州浩然体育器材有限公司 | 小程序开发公司_APP开发多少钱_软件开发定制_微信小程序制作_客户销售管理软件-济南小溪畅流网络科技有限公司 | TPE塑胶原料-PPA|杜邦pom工程塑料、PPSU|PCTG材料、PC/PBT价格-悦诚塑胶 | 舞台木地板厂家_体育运动木地板_室内篮球馆木地板_实木运动地板厂家_欧氏篮球地板推荐 | 卫生纸复卷机|抽纸机|卫生纸加工设备|做卫生纸机器|小型卫生纸加工需要什么设备|卫生纸机器设备多少钱一台|许昌恒源纸品机械有限公司 | 无水硫酸铝,硫酸铝厂家-淄博双赢新材料科技有限公司 | 三轴曲线机-端子插拔力试验机|华杰仪器| 回转支承-转盘轴承-回转驱动生产厂家-洛阳隆达轴承有限公司 | 横河变送器-横河压力变送器-EJA变送器-EJA压力变送器-「泉蕴仪表」 | 工业制氮机_psa制氮机厂家-宏骁智能装备科技江苏有限公司 | led全彩屏-室内|学校|展厅|p3|户外|会议室|圆柱|p2.5LED显示屏-LED显示屏价格-LED互动地砖屏_蕙宇屏科技 | 深圳天际源广告-形象堆头,企业文化墙,喷绘,门头招牌设计制作专家 | 产业规划_产业园区规划-产业投资选址及规划招商托管一体化服务商-中机院产业园区规划网 | 乐泰胶水_loctite_乐泰胶_汉高乐泰授权(中国)总代理-鑫华良供应链 | 施工围挡-施工PVC围挡-工程围挡-深圳市旭东钢构技术开发有限公司 | 散热器厂家_暖气片_米德尔顿散热器| lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | 固诺家居-全屋定制十大品牌_整体衣柜木门橱柜招商加盟 | 美国HASKEL增压泵-伊莱科elettrotec流量开关-上海方未机械设备有限公司 | 新型锤式破碎机_新型圆锥式_新型颚式破碎机_反击式打沙机_锤式制砂机_青州建源机械 | 安徽成考网-安徽成人高考网 | 99文库_实习生实用的范文资料文库站 | 长沙广告公司_制作,长沙喷绘_发光字_招牌制作_长沙泓润广告官网 长城人品牌官网 | 动物解剖台-成蚊接触筒-标本工具箱-负压实验台-北京哲成科技有限公司 | 电动打包机_气动打包机_钢带捆扎机_废纸打包机_手动捆扎机 | 斗式提升机_链式斗提机_带式斗提机厂家无锡市鸿诚输送机械有限公司 | 卫生纸复卷机|抽纸机|卫生纸加工设备|做卫生纸机器|小型卫生纸加工需要什么设备|卫生纸机器设备多少钱一台|许昌恒源纸品机械有限公司 | 真空泵厂家_真空泵机组_水环泵_旋片泵_罗茨泵_耐腐蚀防爆_中德制泵 | 电缆桥架生产厂家_槽式/梯式_热镀锌线槽_广东东莞雷正电气 | 商用绞肉机-熟肉切片机-冻肉切丁机-猪肉开条机 - 广州市正盈机械设备有限公司 | 四川成人高考_四川成考报名网| 深圳装修_店面装修设计_餐厅设计_装修全包价格-尚泰装饰设计 | 无锡网站建设_小程序制作_网站设计公司_无锡网络公司_网站制作 | 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 制氮设备_PSA制氮机_激光切割制氮机_氮气机生产厂家-苏州西斯气体设备有限公司 | VOC检测仪-甲醛检测仪-气体报警器-气体检测仪厂家-深恒安科技有限公司 | 粉末冶金-粉末冶金齿轮-粉末冶金零件厂家-东莞市正朗精密金属零件有限公司 | 北京律师事务所_房屋拆迁律师_24小时免费法律咨询_云合专业律师网 | 深圳装修_店面装修设计_餐厅设计_装修全包价格-尚泰装饰设计 |