我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringBoot配置ShedLock分布式定时任务

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringBoot配置ShedLock分布式定时任务

什么是ShedLock

ShedLock是一个在分布式环境中使用的定时任务框架,用于解决在分布式环境中的多个实例的相同定时任务在同一时间点重复执行的问题,解决思路是通过对公用的数据库中的某个表进行记录和加锁,使得同一时间点只有第一个执行定时任务并成功在数据库表中写入相应记录的节点能够成功执行而其他节点直接跳过该任务。当然不只是数据库,目前已经实现的支持数据存储类型除了经典的关系型数据库,还包括MongoDB,Zookeeper,Redis,Hazelcast。

如何使用

ShedLock采用非侵入式编程的思想,通过注解的方式来实现相应的功能。

要使用ShedLock,请执行以下操作

  • 启用并配置计划锁定
  • 注释您的计划任务
  • 配置锁提供程序

1.启用并配置计划锁定

首先,引入依赖


< dependency >
    < groupId > net.javacrumbs.shedlock </ groupId >
    < artifactId > shedlock-spring </ artifactId >
    < version > 2.5.0 </ version >
</ dependency >

现在我们需要将库集成到Spring中。为了启用计划锁定,请使用@EnableSchedulerLock注释


@Configuration 
@EnableScheduling 
@EnableSchedulerLock(defaultLockAtMostFor  =  “ PT30S ”)
 类 MySpringConfiguration {
     ... 
}

注释您的计划任务


import  net.javacrumbs.shedlock.core.SchedulerLock ;
 
...
 
@Scheduled(...)@
 SchedulerLock(name  =  “ scheduledTaskName ”)
 public  void scheduledTask(){
    //做某事 
}

@SchedulerLock注解一共支持五个参数,分别是

name 用来标注一个定时服务的名字,被用于写入数据库作为区分不同服务的标识,如果有多个同名定时任务则同一时间点只有一个执行成功
lockAtMostFor 成功执行任务的节点所能拥有独占锁的最长时间,单位是毫秒ms
lockAtMostForString 成功执行任务的节点所能拥有的独占锁的最长时间的字符串表达,例如“PT14M”表示为14分钟
lockAtLeastFor 成功执行任务的节点所能拥有独占所的最短时间,单位是毫秒ms
lockAtLeastForString 成功执行任务的节点所能拥有的独占锁的最短时间的字符串表达,例如“PT14M”表示为14分钟

与Spring进行整合,ShedLock支持两种Spring集成模式。

TaskScheduler代理

需要配置两个Bean,一个是lockProvider,一个是scheduler

默认情况下,ShedLock在Spring周围创建AOP代理TaskScheduler。如果未指定任务计划程序,则会为您创建默认任务计划程序。如果您有特殊需求,只需创建一个bean实现TaskScheduler接口,它将自动包装到AOP代理中。

由于ShedLock使用Mongo,JDBC数据库,Redis,Hazelcast,ZooKeeper等外部存储进行协调。所以我选择的是redis。


<dependency>
    <groupId> net.javacrumbs.shedlock </ groupId >
    <artifactId > shedlock-provider-redis-spring </ artifactId >
    <version> 2.5.0 </version>
</dependency >
 
  <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
  </dependency>

@Configuration
@EnableScheduling
@EnableSchedulerLock(defaultLockAtMostFor = "PT5M")
public class ShedLockConfig {
 
 
    @Bean
    public LockProvider lockProvider(RedisTemplate redisTemplate){
        return new RedisLockProvider(redisTemplate.getConnectionFactory());
        
    }
    @Bean 
    public  TaskScheduler taskScheduler(){
     return  new  MySpecialTask​​Scheduler();
    }
    
}

预定方法代理

如果你有更多特殊需求,可以像这样使用Scheduled Method代理


@EnableSchedulerLock(mode  =  PROXY_METHOD,defaultLockAtMostFor  =  “ PT30S ”)

如果PROXY_METHOD选择了mode,则ShedLock会在每个带@SchedulerLock注释的方法周围创建AOP代理。这种方法的主要优点是它不依赖于Spring调度。缺点是即使您直接调用该方法也会应用锁定。还要注意,目前仅支持void返回方法,如果您注释并调用具有非void返回类型的方法,则会引发异常。

到此这篇关于SpringBoot配置ShedLock分布式定时任务的文章就介绍到这了,更多相关SpringBoot ShedLock分布式定时任务内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringBoot配置ShedLock分布式定时任务

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何在SpringBoot中配置ShedLock分布式定时任务

本篇文章为大家展示了如何在SpringBoot中配置ShedLock分布式定时任务,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。什么是ShedLockShedLock是一个在分布式环境中使用的定时任
2023-06-15

SpringBoot怎么集成ShedLock实现分布式定时任务

本文小编为大家详细介绍“SpringBoot怎么集成ShedLock实现分布式定时任务”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringBoot怎么集成ShedLock实现分布式定时任务”文章能帮助大家解决疑惑,下面跟着小编的思路
2023-07-05

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

ShedLock是一个锁,官方解释是他永远只是一个锁,并非是一个分布式任务调度器。一般shedLock被使用的场景是,你有个任务,你只希望他在单个节点执行,而不希望他并行执行,而且这个任务是支持重复执行的
2023-02-24

怎么使用Spring Boot集成ShedLock分布式定时任务

这篇文章给大家分享的是有关怎么使用Spring Boot集成ShedLock分布式定时任务的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、ShedLock是什么?以下是ShedLock锁提供者,通过外部存储实现
2023-06-15

Spring Cloud分布式定时器之ShedLock的实现方法

这篇文章主要介绍了Spring Cloud分布式定时器之ShedLock的实现方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。ShedLockShedLock是一个在分布式
2023-06-08

springboot整合xxl-job实现分布式定时任务的过程

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展,这篇文章主要介绍了springboot整合xxl-job分布式定时任务,需要的朋友可以参考下
2022-11-13

redis如何实现分布式定时任务

Redis本身并不直接支持分布式定时任务的功能,但可以通过Redis的一些特性和与其他组件的结合来实现分布式定时任务。一种常见的实现方式是使用Redis的有序集合(Sorted Set)来存储任务的执行时间和任务的标识,通过定时扫描有序集合
2023-09-06

一分钟掌握Java ElasticJob分布式定时任务

ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案,本文主要通过简单的示例带大家深入了解ElasticJob分布式定时任务的相关知识,需要的可以参考一下
2023-05-19

如何利用Redis实现分布式定时任务

Redis是一个出色的键值存储系统,除了作为缓存使用,还有许多其他用途。其中之一便是作为分布式定时任务的实现工具。在本文中,我们将介绍如何利用Redis实现分布式定时任务,同时提供相应的代码示例。什么是分布式定时任务?在单机环境中,我们可以
如何利用Redis实现分布式定时任务
2023-11-07

如何配置Spring定时任务

今天就跟大家聊聊有关如何配置Spring定时任务,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。第一步,要知道Spring这个架构,很有趣很有意思。可以做到自由插拔功能模块的效果。工程
2023-05-31

SpringBoot如何设置动态定时任务

这篇文章主要介绍了SpringBoot如何设置动态定时任务的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot如何设置动态定时任务文章都会有所收获,下面我们一起来看看吧。之前写过文章记录怎么在Sp
2023-07-02

SpringBoot整合XxlJob分布式任务调度平台

xxl-job是一个开源的分布式定时任务框架,它可以与其他微服务组件一起构成微服务集群。它的调度中心(xxl-job)和执行器(自己的springboot项目中有@XxlJob("定时任务名称")的方法)是相互分离,分开部署的,两者通过HTTP协议进行通信
2023-02-28

web分布式定时任务调度框架怎么使用

这篇文章主要讲解了“web分布式定时任务调度框架怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“web分布式定时任务调度框架怎么使用”吧!一、业务背景1.1 为什么需要使用定时任务调度
2023-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录