广告
返回顶部
首页 > 资讯 > 精选 >如何在SpringBoot中配置ShedLock分布式定时任务
  • 462
分享到

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

2023-06-15 04:06:32 462人浏览 安东尼
摘要

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

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

什么是ShedLock

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

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

预定方法代理

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

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

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

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

springboot是什么

springboot一种全新的编程规范,其设计目的是用来简化新Spring应用的初始搭建以及开发过程,SpringBoot也是一个服务于框架的框架,服务范围是简化配置文件。

上述内容就是如何在SpringBoot中配置ShedLock分布式定时任务,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网精选频道。

--结束END--

本文标题: 如何在SpringBoot中配置ShedLock分布式定时任务

本文链接: https://www.lsjlt.com/news/277711.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作