使用shedlock实现分布式定时任务锁【防止task定时任务重复执行】

这篇具有很好参考价值的文章主要介绍了使用shedlock实现分布式定时任务锁【防止task定时任务重复执行】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第一步:引入shedlock相关依赖

 <!--集成shedlock解决定时任务重复执行的问题-->
            <dependency>
                <groupId>net.javacrumbs.shedlock</groupId>
                <artifactId>shedlock-spring</artifactId>
                <version>2.2.1</version>
            </dependency>
            <dependency>
                <groupId>net.javacrumbs.shedlock</groupId>
                <artifactId>shedlock-provider-jdbc-template</artifactId>
                <version>2.2.1</version>
            </dependency>

ShedLock还可以使用Mongo,Redis,Hazelcast,ZooKeeper等外部存储进行协调,例如使用redis则引入下面的包

			<dependency>
                <groupId>net.javacrumbs.shedlock</groupId>
                <artifactId>shedlock-provider-redis-spring</artifactId>
                <version>${shedlock.redis.version}</version>
            </dependency>

第二步:创建数据库表结构,数据库表的脚本如下:

CREATE TABLE shedlock(
	NAME VARCHAR(64),
	lock_until TIMESTAMP(3) NULL,
	locked_at TIMESTAMP(3) NULL,
	locked_by VARCHAR(255),
	PRIMARY KEY (NAME)
)

第三步:添加shedlock配置类(定时任务防重复执行的配置类)

package com.sionma.dcxt.config;

import net.javacrumbs.shedlock.core.LockProvider;
import net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider;
import net.javacrumbs.shedlock.spring.ScheduledLockConfiguration;
import net.javacrumbs.shedlock.spring.ScheduledLockConfigurationBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;

import javax.sql.DataSource;
import java.time.Duration;

/**
 * FileName: ShedlockConfig
 * Author:   SixJR.
 * Date:     2023/6/23 21:26:24
 * Description: 定时任务防重复执行的配置类
 * History:
 * <author>          <time>          <version>          <desc>
 */
@Configuration
@EnableScheduling
public class ShedlockConfig {
    @Bean
    public LockProvider lockProvider(DataSource dataSource) {
        return new JdbcTemplateLockProvider(dataSource);
    }

    @Bean
    public ScheduledLockConfiguration scheduledLockConfiguration(LockProvider lockProvider) {
        return ScheduledLockConfigurationBuilder
                .withLockProvider(lockProvider)
                .withPoolSize(10)
                .withDefaultLockAtMostFor(Duration.ofMinutes(10))
                .build();
    }

}

第四步:在启动类上添加启动注解,否则SchedulerLock不会生效

@EnableSchedulerLock(defaultLockAtMostFor = "PT50S")

使用shedlock实现分布式定时任务锁【防止task定时任务重复执行】
第五步:在执行定时任务的方法上面加上你要限制重复执行的注解@SchedulerLock

// 锁最多保持50秒,最少保持40秒
@SchedulerLock(name = "orderCancelTask", lockAtMostFor = 50 * 1000, lockAtLeastFor = 40 * 1000) 

以下是该注解的属性解释:
@SchedulerLock注解是Quartz Scheduler中的一个扩展注解,用于控制定时任务的并发执行。该注解具有以下属性:
name:设置任务的名称。该名称用于标识任务,在Quartz Scheduler中唯一。通常建议为任务命名一个具有描述性的名称。

lockAtMostFor:设置任务的最长锁定时间。这个值表示任务的最长允许运行时间。如果任务在此时间段内未能执行完成,Quartz Scheduler将会中断任务运行。属性值是以毫秒为单位的长整数。

lockAtLeastFor:设置任务的最短锁定时间。这个值表示任务被锁定的最短时间。即使任务的业务逻辑执行时间很短,也会保持锁定指定的时间。属性值是以毫秒为单位的长整数。
使用shedlock实现分布式定时任务锁【防止task定时任务重复执行】文章来源地址https://www.toymoban.com/news/detail-497805.html

到了这里,关于使用shedlock实现分布式定时任务锁【防止task定时任务重复执行】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 架构师系列- 定时任务(一)- 单机和分布式定时任务比较

    架构师系列- 定时任务(一)- 单机和分布式定时任务比较

    定时任务概述 在很多应用中我们都是需要执行一些定时任务的,比如定时发送短信,定时统计数据,在实际使用中我们使用什么定时任务框架来实现我们的业务,定时任务使用中会遇到哪些坑,如何最大化的提高定时任务的性能。 我们这里主要介绍单机和分布式两大类的解

    2024年04月27日
    浏览(17)
  • 分布式定时任务框架 PowerJob

    分布式定时任务框架 PowerJob

    1.1 为什么需要使用定时任务调度 (1)时间驱动处理场景:整点发送优惠券,每天更新收益,每天刷新标签数据和人群数据。 (2)批量处理数据:按月批量统计报表数据,批量更新短信状态,实时性要求不高。 (3)异步执行解耦:活动状态刷新,异步执行离线查询,与内部

    2024年02月09日
    浏览(10)
  • Java | 一分钟掌握定时任务 | 9 - PowerJob分布式定时任务

    Java | 一分钟掌握定时任务 | 9 - PowerJob分布式定时任务

    作者:Mars酱 声明:本文章由Mars酱整理编写,部分内容来源于网络,如有疑问请联系本人。 转载:欢迎转载,转载前先请联系我! 我们选择一套框架或者技术的时候,一定要知道它的特点和功能,不能为了(学习)技术而(选择)技术,那是对产品的不负责任。官方说有类似情况

    2024年01月24日
    浏览(10)
  • Java | 一分钟掌握定时任务 | 7 - ElasticJob分布式定时任务

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

    作者:Mars酱 声明:本文章由Mars酱编写,部分内容来源于网络,如有疑问请联系本人。 转载:欢迎转载,转载前先请联系我! ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案。 它通过弹性调度、资源管控、以及任务治理的功能,打造一个适用于互联网场景的分

    2024年02月06日
    浏览(23)
  • 分布式定时任务调度框架Quartz

    分布式定时任务调度框架Quartz

    Quartz是一个定时任务调度框架,比如你遇到这样的问题: 比如淘宝的待支付功能,后台会在你生成订单后24小时后,查看订单是否支付,未支付则取消订单 比如vip的每月自动续费功能 … 想定时在某个时间,去做某件事 Quartz是一套轻量级的任务调度框架,只需要定义了 Job(

    2024年02月04日
    浏览(14)
  • Spring Boot 3 整合 xxl-job 实现分布式定时任务调度,结合 Docker 容器化部署(图文指南)

    Spring Boot 3 整合 xxl-job 实现分布式定时任务调度,结合 Docker 容器化部署(图文指南)

    xxl-job 是一个分布式任务调度平台,它提供了强大的任务调度和执行能力,可以帮助我们实现任务的自动化调度和执行。本文将介绍如何在 Docker 环境下部署 xxl-job,并将其与 Spring Boot 进行整合。 数据库脚本:tables_xxl_job-2.4.0.sql Docker 镜像地址: https://hub.docker.com/r/xuxueli/xxl-jo

    2024年02月06日
    浏览(21)
  • 分布式定时任务调度xxl-job

    分布式定时任务调度xxl-job

    Quartz中最重要的三个对象:Job(作业)、Trigger(触发器)、Scheduler(调度器)。 xxl-job的调度原理:调度线程在一个while循环中不断地获取一定数量的即将触发的Trigger,拿到绑定的Job,包装成工作线程执行。 当然,不管在任何调度系统中,底层都是线程模型。如果要自己写一个

    2024年03月10日
    浏览(9)
  • 分布式定时任务-XXL-JOB-教程+实战

    分布式定时任务-XXL-JOB-教程+实战

    1.定时任务认识 1.1.什么是定时任务 定时任务是按照指定时间周期运行任务。使用场景为在某个固定时间点执行,或者周期性的去执行某个任务,比如:每天晚上24点做数据汇总,定时发送短信等。 1.2.常见定时任务方案 While + Sleep : 通过循环加休眠的方式定时执行 Timer和Time

    2024年02月16日
    浏览(15)
  • springcloud:新一代分布式定时任务框架——PowerJob

    springcloud:新一代分布式定时任务框架——PowerJob

    之前我们讲解过主流的分布式定时任务框架xxl-job,随着技术的迭代更新,更多的定时任务框架也开始出现,今天我们来看一看新一代的定时任务框架 PowerJob PowerJob是基于java开发的企业级的分布式任务调度平台,与xxl-job一样,基于web页面实现任务调度配置与记录,使用简单,

    2024年02月02日
    浏览(14)
  • Springboot 定时任务,分布式下幂等性如何解决

    Springboot 定时任务,分布式下幂等性如何解决

    在分布式环境下,定时任务的幂等性问题需要考虑多个节点之间的数据一致性和事务处理。 一种解决方法是使用分布式锁来保证同一时间只有一个节点能够执行该任务。具体实现可以使用Redis或Zookeeper等分布式协调工具提供的分布式锁功能。 另一种解决方法是使用消息队列来

    2024年02月11日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包