一、背景

之前分享过分布式定时任务的技术选型方案:分布式定时任务技术选型方案,个人青睐xxl_job,分享了搭建接入流程:xxl_job搭建方案,本次项目需求较为简单,同时时间紧张。下面介绍利用Redis锁实现分布式定时任务的方案。

二、@Scheduled注解

1. 利用@Scheduled注解实现定时任务,源码如下

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(Schedules.class)
public @interface Scheduled {String cron() default "";String zone() default "";long fixedDelay() default -1;String fixedDelayString() default "";long fixedRate() default -1;String fixedRateString() default "";long initialDelay() default -1;String initialDelayString() default "";}

2. 注解参数

3. 示例

cron

@Scheduled(cron = "0/2 * * * * ?")

从0秒开始,每隔两秒执行一次。

zone

@Scheduled(cron = "0/2 * * * * ?", zone = "GMT-8:00")

从0秒开始,每隔两秒执行一次。

指定时间使用的时区为东八区。

fixedRate

@Scheduled(fixedRate = 1000)

1秒执行一次,上次执行开始后过1秒执行下一次。若到了1秒后但上次执行还未完成,会加入worker队列,等待上一次执行完成后,马上执行下一次。

fixedRateString

@Scheduled(fixedDelayString = "1000")
@Scheduled(fixedDelayString = "PT1S")

都表示1秒执行一次,上次执行开始后过1秒执行下一次。若到了1秒后但上次执行还未完成,会加入worker队列,等待上一次执行完成后,马上执行下一次。

fixedDelay

@Scheduled(fixedDelay = 1000)

秒执行一次,上次执行完成后过1秒继续执行下一次。

fixedDelayString

@Scheduled(fixedDelayString = "1000")
@Scheduled(fixedDelayString = "PT1S")

都表示1秒执行一次,上次执行完成后过1秒继续执行下一次。

initialDelay

@Scheduled(initialDelay = 5000, fixedRate = 2000)

首次5秒后执行,后续每隔2秒执行一次(遵循fixedRate 规则)

@Scheduled(initialDelay = 5000, fixedDelay = 2000)

首次5秒后执行,后续每隔2秒执行一次(遵循fixedDelay 规则)

注意:initialDelay、initialDelayString都不能和cron一起使用

initialDelayString

@Scheduled(initialDelayString = "5000", fixedRate = 2000)

首次5秒后执行,后续每隔2秒执行一次(遵循fixedRate 规则)

@Scheduled(initialDelayString = "5000", fixedDelay = 2000)

首次5秒后执行,后续每隔2秒执行一次(遵循fixedDelay 规则)

注意:initialDelay、initialDelayString都不能和cron一起使用

三、实现代码

1. 引入Redis

<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.13.5</version>
</dependency>

2. 定时任务执行类代码

@Scheduled(cron = "0 0 23 * * ?")public void statistics() {RLock lock = redissonClient.getLock("cron_statistics");boolean lockResult = false;try {if (lockResult = lock.tryLock()) {log.info("每天23点执行一次任务开始!");}} catch (Exception e) {e.printStackTrace();log.error("每天23点执行一次任务失败{}", e);} finally {if (lock.isHeldByCurrentThread() && lockResult && lock != null) {lock.unlock();}}}

3. 启动类增加注解

@EnableScheduling

如果有帮助,请多多点赞关注支持哦

Springboot结合Redis实现分布式定时任务相关推荐

  1. springboot整合redis实现分布式锁思想

    思路 所有响应获取锁的线程都先尝试往redis中创建一个缓存数据,所有线程的key必须相同.使用的是redis的setnx命令.就只有一个线程能够创建成功,创建成功的线程就成功获取锁. 没有获取锁的线 ...

  2. spring boot基于redis的分布式定时任务

    第一步. 自动配置类 主启动类添加:@EnableScheduling //开启定时任务 aop和redis  POM添加: <!--redis驱动--><dependency> ...

  3. 借助redis实现分布式定时任务锁

    场景说明:当前系统是分布式的,工程中有定时任务,要求同一时间只有一个任务出发执行,也不要都在一个部署的服务执行. 技术引用:redisson 3.17.7.spring boot 2.2.5 核心代码 ...

  4. Elastic-job实现分布式定时任务

    Elastic-job实现分布式定时任务 前言 最近接了一个新的需求,需要使用到定时任务,由于我们的系统是分布式的,所以Spring自带的定时任务无法满足我们当前系统对定时任务的需要.我们需要一个能够 ...

  5. SpringBoot(46) 整合ShedLock实现分布式定时任务(redis版)

    文章目录 一.前言 二.SpringBoot整合ShedLock 1.`pom.xml`中引入依赖 2.Shedlock配置类 3.测试数据定时任务 三.本文案例demo源码 一.前言 本文将基于sp ...

  6. Java基于redis实现分布式锁(SpringBoot)

    前言 分布式锁,其实原理是就是多台机器,去争抢一个资源,谁争抢成功,那么谁就持有了这把锁,然后去执行后续的业务逻辑,执行完毕后,把锁释放掉. 可以通过多种途径实现分布式锁,例如利用数据库(mysql等 ...

  7. 基于Redis实现分布式锁,避免重复执行定时任务

    Spring提供了定时任务的功能,但是在多个实例的集群中,会出现定时任务重复执行多次的情况. 使用Qutaz框架自带的分布式定时任务可以很好的解决这个问题,但是讲道理功能有些过于强大,对于需求不高,乃 ...

  8. 【redis】分布式锁实现,与分布式定时任务

    如果你还不知道redis的基本命令与基本使用方法,请看 [redis]redis基础命令学习集合 写在前面 redis辣么多数据结构,这么多命令,具体一点,都可以应用在什么场景呢?用来解决什么具体的问 ...

  9. redis实现轮询算法_Dcron:基于redis与一致性哈希算法的分布式定时任务库

    背景 最近项目中的定时任务越来越多,为了防止任务重复执行曾经使用过的方案: 只启用了一个节点. 固定循环间隔,使用分布式事务锁. 部署一套分布式任务调度系统. 方案一 没有容错机制,当单个节点宕机,所 ...

  10. 使用redis分布式锁+lua脚本实现分布式定时任务控制demo

    2019独角兽企业重金招聘Python工程师标准>>> 分布式系统经常要遇到定时任务执行的问题,不能重复执行,但很多时候又不能统一到一个微服务里面,因为这样就失去了微服务的意义.由于 ...

最新文章

  1. s9.16作业,员工信息表
  2. vmware虚拟机异常关闭处理
  3. 用 WEKA 进行数据挖掘,第 2 部分: 分类和群集
  4. LeetCode刷题知识总结
  5. Struts2、SpringMVC、Servlet(Jsp)性能对比 测试 。 Servlet的性能应该是最好的,可以做为参考基准,其它测试都要向它看齐,参照...
  6. [脚本收集]提取Tripntale图片
  7. Xiki Shell Kickstarter,HummingBoard计算机等
  8. Tensor:Pytorch神经网络界的Numpy
  9. flask 加载配置文件
  10. HDU 5586 Sum (预处理 + 动态规划)
  11. Python词频统计(去重)
  12. IDEA使用教程(一)
  13. yuv422,yuv420,yuv444的区别
  14. 复制文字到剪贴板的几种方法
  15. MATLAB的卡尔曼滤波函数与实例
  16. WML语言基础(WAP建站)三
  17. zemax光学设计高阶优化
  18. 基于python-opencv给图像添加水印
  19. 朝花夕拾:Java中实现对EXCEL文件的读取
  20. Autodesk Alias AutoStudio 2022.1 x64

热门文章

  1. IDEA快速启动ssm项目
  2. 快速打开ofd文件发票转换pdf格式发票方法
  3. maven 命令下载jar包(mvn命令根据依赖下载jar包)
  4. 那智机器人程序备份复原方法
  5. 冒泡排序(图解+代码详解)
  6. 题目29 英文输入法单词联想
  7. 【毕设教程】ESP8266 WiFi 模块介绍和使用
  8. TK mybatis 逆向工程
  9. LDA模型原理学习及应用
  10. 浅谈信号处理三大变换