java 分布式任务_Java中实现分布式定时任务
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中实现分布式定时任务相关推荐
- java mod %区别_Java中 % 与Math.floorMod() 区别详解
%为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...
- java show过时_Java中show() 方法被那个方法代替了? java编程 显示类中信
你说的show是swing里的吧,在老版本中Component这个超类确实有show这个方法,而且这个方法也相当有用,使一个窗口可见,并放到最前面.在jdk5.0中阻止了这个方法,普遍用setVisi ...
- java判断类型_Java中类型判断的几种方式 - 码农小胖哥 - 博客园
1. 前言 在Java这种强类型语言中类型转换.类型判断是经常遇到的.今天就细数一下Java中类型判断的方法方式. 2. instanceof instanceof是Java的一个运算符,用来判断一个 ...
- java 序列化实例_Java中的序列化与反序列化实例
创建的字节流与平台无关.因此,在一个平台上序列化的对象可以在另一个平台上反序列化. 为了使Java对象可序列化,我们实现java.io.Serializable可序列化接口. ObjectOutput ...
- java 数据类型分为_JAVA中分为基本数据类型及引用数据类型
byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值 ...
- java 代码锁_Java中的Lock锁
Lock锁介绍: 在java中可以使用 synchronized 来实现多线程下对象的同步访问,为了获得更加灵活使用场景.高效的性能,java还提供了Lock接口及其实现类ReentrantLock和 ...
- java wait 参数_java中wait()和join()方法的区别是什么
java中wait()和join()方法的区别是:存在不同的java包中:wait()方法用于线程间通信,它所施加的等待状态的线程可以被启动:join()方法用于在多个线程之间添加排序,它所施加的等待 ...
- java thread join()_Java中Thread.join()的使用方法
概要 本文分三个部分对thread.join()进行分析: 1. join() 的示例和作用 2. join() 源码分析 3. 对网上其他分析 join() 的文章提出疑问 1. join() 的示 ...
- java 锁定界面_Java中的锁
java中的锁遵循不同的分类方法,太多了,乐观锁/悲观锁,可重入锁/不可重入锁,有些第一遇到的话,可能还有点懵.刚好周末有时间学习下,总结和梳理下. 一总述 总的来说对java的锁有以下七种分类方法: ...
- java final 函数_JAVA中Final的用法
1. 修饰基础数据成员的final 这是final的主要用途,其含义相当于C/C++的const,即该成员被修饰为常量,意味着不可修改.如java.lang.Math类中的PI和E是f ...
最新文章
- pytorch版本的bert使用笔记
- 用shell编写的贪吃蛇游戏
- 医学工作者如何进行医学科研设计?
- 八卦一下 惠普曾是Oracle的练爱对象
- Qt 从C ++定义QML类型(一)
- ab plc软件_回收三菱PLC模块西门子模块AB模块数控模块单片机回收【三菱plc吧】...
- python怎么导入opencv_对python opencv 添加文字 cv2.putText 的各参数介绍
- 【机器视觉】 endwhile算子
- IIS上部署asp.net core2.1项目
- vs2017创建外部css,webpack - 从生成的Microsoft SPA模板VS2017 webpack中删除特定供应商css - 堆栈内存溢出...
- SpringBoot 2.x 集成Redis
- 2017-06-27
- 高德地图获取坐标距离_【转】根据高德地图得出的坐标算出两点之间的距离
- 阿里腾讯百度们已经占据了全球互联网半壁江山!
- 阳江口碑好的java培训价格
- 主分区损坏diskgenius_DiskGenius怎么修复损坏分区 显示主分区损坏解决方法
- [算法]算法学习05
- Symmetric Difference
- 英语情景对话计算机的优缺点,英语口语考试情景对话互联网的利与弊
- Python中Debug调试步骤