SpringBoot集成ShedLock实现分布式定时任务流程详解.docx
第
SpringBoot集成ShedLock实现分布式定时任务流程详解
目录一、背景二、ShedLock是什么三、落地实现3.1引入依赖包3.2配置数据库连接信息3.3创建Mysql数据表3.4配置LockProvider3.5创建定时Job四、结果分析
一、背景
在项目服务是集群部署的时候,代码在每个人都会有定时任务,但是如果让每个节点都去跑定时任务是不大合适的。SpringBoot中的ShedLock可以很好解决这个问题,下面我将为大家详细介绍SpringBoot如何集成ShedLock,而ShedLock又是如何实现分布式定时的。
二、ShedLock是什么
官方地址
以下是ShedLock锁提供者,通过外部存储实现锁,由下图可知外部存储集成的库还是很丰富:
本篇教程我们基于JdbcTemplate存储为例来使用ShedLock锁。
三、落地实现
3.1引入依赖包
shedlock所需依赖包:
!--web工程依赖包--
dependency
groupIdorg.springframework.boot/groupId
artifactIdspring-boot-starter-web/artifactId
/dependency
dependency
groupIdnet.javacrumbs.shedlock/groupId
artifactIdshedlock-spring/artifactId
version4.2.0/version
/dependency
!--每个外部存储实例所需依赖包不一样,这里是jdbc--
dependency
groupIdnet.javacrumbs.shedlock/groupId
artifactIdshedlock-provider-jdbc-template/artifactId
version4.2.0/version
/dependency
dependency
groupIdorg.springframework.boot/groupId
artifactIdspring-boot-starter-jdbc/artifactId
/dependency
dependency
groupIdmysql/groupId
artifactIdmysql-connector-java/artifactId
scoperuntime/scope
/dependency
依赖包树形图:
3.2配置数据库连接信息
server:
port:8105
spring:
datasource:
url:jdbc:mysql://:3306/testjdbcuseUnicode=truecharacterEncoding=UTF-8serverTimezone=Asia/Shanghai
username:root
password:123456
driver-class-name:com.mysql.cj.jdbc.Driver
type:com.mysql.cj.jdbc.MysqlDataSource
3.3创建Mysql数据表
CREATETABLE`shedlock`(
`name`varchar(64)NOTNULLCOMMENTname,
`lock_until`timestamp(3)NULLDEFAULTNULL,
`locked_at`timestamp(3)NULLDEFAULTNULL,
`locked_by`varchar(255)NULLDEFAULTNULL,
PRIMARYKEY(`name`)
ENGINE=InnoDB
DEFAULTCHARACTERSET=utf8mb4COLLATE=utf8mb4_0900_ai_ci
ROW_FORMAT=DYNAMIC
;
3.4配置LockProvider
ShedLockConfig.java:
importnet.javacrumbs.shedlock.core.LockProvider;
import