文档详情

SpringBoot集成ShedLock实现分布式定时任务流程详解.docx

发布:2025-05-13约1.1万字共11页下载文档
文本预览下载声明

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

显示全部
相似文档