Monogo

DynamoDB

JdbcTemplate

ZooKeeper (using Curator)

Redis (using Spring RedisConnectionFactory)

Redis (using Jedis)

Hazelcast

第一步引入依赖

net.javacrumbs.shedlock

shedlock-spring

4.11.1

net.javacrumbs.shedlock

shedlock-provider-jdbc-template

4.11.1

第二步添加配置类

importnet.javacrumbs.shedlock.core.LockProvider;importnet.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.jdbc.core.JdbcTemplate;importjavax.annotation.Resource;importjavax.sql.DataSource;importjava.util.TimeZone;/*** @descrition shedlock配置类

*@since2021-01-10 22:39*/@Configurationpublic classShedLockConfig {

@ResourceprivateDataSource dataSource;/*** @description

* @date 2021/1/10 22:39*/@BeanpublicLockProvider lockProvider() {return newJdbcTemplateLockProvider(

JdbcTemplateLockProvider.Configuration.builder()

.withJdbcTemplate(newJdbcTemplate(dataSource))

.withTimeZone(TimeZone.getTimeZone("GMT+8"))

.build()

);

}

}

第三步,添加公共存储,前面我们说过shedlock支持多种公共存储作为锁,本文我们以mysql为例

CREATE TABLEshedlock (

NAMEVARCHAR ( 64 ) NOT NULL,

lock_untilTIMESTAMP ( 3 ) NOT NULL,

locked_atTIMESTAMP ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3),

locked_byVARCHAR ( 255 ) NOT NULL,PRIMARY KEY( NAME )

);

第四步,添加具体任务类

importlombok.extern.slf4j.Slf4j;importnet.javacrumbs.shedlock.spring.annotation.SchedulerLock;importorg.springframework.scheduling.annotation.Scheduled;importorg.springframework.stereotype.Component;importjava.text.SimpleDateFormat;importjava.util.Date;/***@authorshane

* @date 2021/1/10 23:39*/@Slf4j

@Componentpublic classTestJob {/*** @description 每隔1min打印一次

* @date 2021/1/10 23:39*/@Scheduled(cron= "0 0/1 * * * ?")//lockAtMostFor为锁默认持有时间,会覆盖启动类中的默认持有时间

@SchedulerLock(name = "demo", lockAtMostFor = "70m")public void print() throwsInterruptedException {

SimpleDateFormat df= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式

log.warn("当前时间:"+df.format(newDate()));

}

}

接着,我们复制一份代码,分别启动两个实例来看结果

数据库记录

@SchedulerLock注解参数说明

name:定时任务的名字,就是数据库中的内个主键

lockAtMostFor:锁的最大时间单位为毫秒

lockAtLeastFor:锁的最小时间单位为毫秒

对了,还有启动类的配置

@SpringBootApplication

@MapperScan("com.example.test.mapper")

@EnableScheduling

@EnableSchedulerLock(defaultLockAtMostFor= "10m") // 默认的锁的时间public classTestApplication {public static voidmain(String[] args) {

SpringApplication.run(TestApplication.class, args);

}

}

参考出处: https://www.jianshu.com/p/941416645606

shedlock的github地址:https://github.com/lukas-krecan/ShedLock

java 分布式任务_Java中实现分布式定时任务相关推荐

  1. java mod %区别_Java中 % 与Math.floorMod() 区别详解

    %为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...

  2. java show过时_Java中show() 方法被那个方法代替了? java编程 显示类中信

    你说的show是swing里的吧,在老版本中Component这个超类确实有show这个方法,而且这个方法也相当有用,使一个窗口可见,并放到最前面.在jdk5.0中阻止了这个方法,普遍用setVisi ...

  3. java判断类型_Java中类型判断的几种方式 - 码农小胖哥 - 博客园

    1. 前言 在Java这种强类型语言中类型转换.类型判断是经常遇到的.今天就细数一下Java中类型判断的方法方式. 2. instanceof instanceof是Java的一个运算符,用来判断一个 ...

  4. java 序列化实例_Java中的序列化与反序列化实例

    创建的字节流与平台无关.因此,在一个平台上序列化的对象可以在另一个平台上反序列化. 为了使Java对象可序列化,我们实现java.io.Serializable可序列化接口. ObjectOutput ...

  5. java 数据类型分为_JAVA中分为基本数据类型及引用数据类型

    byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值 ...

  6. java 代码锁_Java中的Lock锁

    Lock锁介绍: 在java中可以使用 synchronized 来实现多线程下对象的同步访问,为了获得更加灵活使用场景.高效的性能,java还提供了Lock接口及其实现类ReentrantLock和 ...

  7. java wait 参数_java中wait()和join()方法的区别是什么

    java中wait()和join()方法的区别是:存在不同的java包中:wait()方法用于线程间通信,它所施加的等待状态的线程可以被启动:join()方法用于在多个线程之间添加排序,它所施加的等待 ...

  8. java thread join()_Java中Thread.join()的使用方法

    概要 本文分三个部分对thread.join()进行分析: 1. join() 的示例和作用 2. join() 源码分析 3. 对网上其他分析 join() 的文章提出疑问 1. join() 的示 ...

  9. java 锁定界面_Java中的锁

    java中的锁遵循不同的分类方法,太多了,乐观锁/悲观锁,可重入锁/不可重入锁,有些第一遇到的话,可能还有点懵.刚好周末有时间学习下,总结和梳理下. 一总述 总的来说对java的锁有以下七种分类方法: ...

  10. java final 函数_JAVA中Final的用法

    1.         修饰基础数据成员的final 这是final的主要用途,其含义相当于C/C++的const,即该成员被修饰为常量,意味着不可修改.如java.lang.Math类中的PI和E是f ...

最新文章

  1. pytorch版本的bert使用笔记
  2. 用shell编写的贪吃蛇游戏
  3. 医学工作者如何进行医学科研设计?
  4. 八卦一下 惠普曾是Oracle的练爱对象
  5. Qt 从C ++定义QML类型(一)
  6. ab plc软件_回收三菱PLC模块西门子模块AB模块数控模块单片机回收【三菱plc吧】...
  7. python怎么导入opencv_对python opencv 添加文字 cv2.putText 的各参数介绍
  8. 【机器视觉】 endwhile算子
  9. IIS上部署asp.net core2.1项目
  10. vs2017创建外部css,webpack - 从生成的Microsoft SPA模板VS2017 webpack中删除特定供应商css - 堆栈内存溢出...
  11. SpringBoot 2.x 集成Redis
  12. 2017-06-27
  13. 高德地图获取坐标距离_【转】根据高德地图得出的坐标算出两点之间的距离
  14. 阿里腾讯百度们已经占据了全球互联网半壁江山!
  15. 阳江口碑好的java培训价格
  16. 主分区损坏diskgenius_DiskGenius怎么修复损坏分区 显示主分区损坏解决方法
  17. [算法]算法学习05
  18. Symmetric Difference
  19. 英语情景对话计算机的优缺点,英语口语考试情景对话互联网的利与弊
  20. Python中Debug调试步骤

热门文章

  1. ftp 服务器文件夹创建命令,ftp 服务器文件夹创建命令
  2. 怎样访问ftp服务器文件夹权限,访问ftp服务器文件夹权限设置
  3. 【Godot】拖放的逻辑
  4. Linux之DNS篇
  5. 国科大UCAS大气物理期末复习笔记/大气物理基础入门
  6. .NET如何对接PayPal支付
  7. 静态代理、JDK与Cglib动态代理简单实现
  8. android 消息推送js,消息推送方式
  9. matlab 排序 sorttrows
  10. Leetcode题解(更新中……)