Springboot使用@Scheduled多节点启动时调度重复执行
在项目中使用@Scheduled注解实现定时调度十分方便,但是存在一个情况:当项目多节点部署时,调度会在每个节点上都执行。这就是个大问题了。网上解决方案也比较多,我用过两种方案:第一种是:指定一台主机,让调度只在一台主机上执行。第二种是:使用redis的分布式锁实现。
第一种,失去了分布式部署的宗旨。下面我简单的介绍下第二种
1、创建Redis工具类中,增加setNX方法,即"SET if Not Exists",成功返回true,失败返回flase:
public Boolean setNX(String key, String value,long timeout, TimeUnit unit) {Boolean isExit = this.redisTemplate.getConnectionFactory().getConnection().setNX(key.getBytes(), value.getBytes());//如果设置成功,要设置其过期时间if (isExit) {redisTemplate.expire(key, timeout, unit);}return isExit;}
2、在业务代码中引用方法:
public void testtest() throws InterruptedException {try{if (!redisUtil.setNX("quartzFlag","1",30,TimeUnit.SECONDS)){//设置超时时间LOGGER.info("任务已执行");return;}业务代码...............} catch (Exception e) {e.printStackTrace();} finally {//任务完成后,释放redis锁RedisUtil.del("activityScheduledFlag");}
为防止程序意外终止,导致死锁,文章中用到了,任务完成释放锁和设置过期时间双重保障。
这是在使用的时候总结的。如有错误,请批评指正。
一切的真理都是实践中产生的。交给时间去验证吧
Springboot使用@Scheduled多节点启动时调度重复执行相关推荐
- ROS机器人程序设计(原书第2版)3.1.2 ROS节点启动时调用gdb调试器
3.1.2 ROS节点启动时调用gdb调试器 我们需要一个启动文件(launch)去启动节点,如下: 想要在节点启动时调用gdb调试器,需要添加launch-prefix="xterm -e ...
- SpringBoot启动时实现自动执行代码的几种方式讲解
点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/u011291072/article/ details/81813662 前言 目前开发的SpringBoot项目在启动的时候需 ...
- java安装的时候无效参数,spring-boot 打成jar把后 启动时指定参数无效
今天后台项目进行修改,使用spring.profiles来指定启动时使用的配置文件.在项目中添加好配置文件后使用java -jar .\base-exec.jar --spring.profiles. ...
- 介绍Spring Boot 启动时,自动执行指定方法的 7 种方法
目录 前言 实现方式 1.实现ServletContextListener接口contextInitialized方法 2.静态代码块方式 3.@PostConstruct注解方式 4. 实现Serv ...
- springboot 好玩的自定义设置——启动时的banner
一.banner字符串下载链接 Ascii艺术字实现个性化Spring Boot启动banner图案,轻松修改更换banner.txt文件内容,收集了丰富的banner艺术字和图,并且支持中文bann ...
- (转)SpringBoot 打包为war包启动时导入外部配置文件
转自:http://blog.csdn.net/nijiayy/article/details/78457800 最近在做一个SpirngBoot的项目,要求服务器部署的时候使用tomcat启动war ...
- springBoot打war包后,启动时导入外部配置文件
之前一直都是将配置文件等全部打成一个包使用,后来因为维护啥的都比较困难,所以将配置文件移出来,从外界去依赖: 首先就是在项目的 configuration文件夹中添加一个类: LocalSetting ...
- SpringBoot 打包为war包启动时导入外部配置文件
最近在做一个SpirngBoot的项目,要求服务器部署的时候使用tomcat启动war包的时候需要导入一个指定位置的application.properties文件.在网上查找了相关的问题之后,发现大 ...
- 预发环境与生产环境共享数据库时定时任务重复执行问题解决
背景: 为保证预发环境的真实性,预发与生产环境往往共享数据库,在定时任务列表中,预发与生产环境都会从任务列表中获取定时任务,然后执行,这会导致定时任务会执行重复. 解决方法: 在job中增加一个环境变 ...
- Linux中的计划任务—Crontab调度重复执行的任务
文章目录 目标 背景介绍 Crontab是什么 Crontab实践 安装并检查Crontab服务 1.检查cron服务: 2.安装cron 案例实现 Crontab的基本组成 Crontab的配置文件 ...
最新文章
- 「分布式」艺术创作:20分钟+1080显卡,这个AI就能创造复杂作品 | 开源
- 2011寒假-操作系统学习笔记
- flask读取数据库(mysql)并展示表格(讲解获取表头的方法)【附上flask好看点的helloworld】
- 高效java工具类总结
- DOM——获取元素的方式
- Base64 的 JavaScript 实现 js-base64
- 鼠标移动到曲线图上显示值
- 神州十三号就位,小火箭先去探探路
- 利用PaddleOCR实现摄像头实时OCR
- DZZ云桌面1.3下载 多图介绍
- 大学概率论与数理统计知识点详细整理
- Vim 插件管理工具 pathogen
- 《网络是怎样连接的》-----户根勤,读书笔记
- 使用xshell登陆腾讯云主机
- 【OpenIM原创】uni-app使用之 初始化会话 消息 好友 监听器
- 磨金石教育摄影技能干货分享|什么是序列摄影?它让摄影更加深刻
- python 拦截windows弹窗广告_win10怎么阻止弹窗广告拦截功能的方法
- 直播APP开发详细内容
- 12.27追求世俗意义上的成功与心灵快感的矛盾
- 组合电路中的竞争与冒险