在项目中使用@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多节点启动时调度重复执行相关推荐

  1. ROS机器人程序设计(原书第2版)3.1.2 ROS节点启动时调用gdb调试器

    3.1.2 ROS节点启动时调用gdb调试器 我们需要一个启动文件(launch)去启动节点,如下: 想要在节点启动时调用gdb调试器,需要添加launch-prefix="xterm -e ...

  2. SpringBoot启动时实现自动执行代码的几种方式讲解

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/u011291072/article/ details/81813662 前言 目前开发的SpringBoot项目在启动的时候需 ...

  3. java安装的时候无效参数,spring-boot 打成jar把后 启动时指定参数无效

    今天后台项目进行修改,使用spring.profiles来指定启动时使用的配置文件.在项目中添加好配置文件后使用java -jar .\base-exec.jar --spring.profiles. ...

  4. 介绍Spring Boot 启动时,自动执行指定方法的 7 种方法

    目录 前言 实现方式 1.实现ServletContextListener接口contextInitialized方法 2.静态代码块方式 3.@PostConstruct注解方式 4. 实现Serv ...

  5. springboot 好玩的自定义设置——启动时的banner

    一.banner字符串下载链接 Ascii艺术字实现个性化Spring Boot启动banner图案,轻松修改更换banner.txt文件内容,收集了丰富的banner艺术字和图,并且支持中文bann ...

  6. (转)SpringBoot 打包为war包启动时导入外部配置文件

    转自:http://blog.csdn.net/nijiayy/article/details/78457800 最近在做一个SpirngBoot的项目,要求服务器部署的时候使用tomcat启动war ...

  7. springBoot打war包后,启动时导入外部配置文件

    之前一直都是将配置文件等全部打成一个包使用,后来因为维护啥的都比较困难,所以将配置文件移出来,从外界去依赖: 首先就是在项目的 configuration文件夹中添加一个类: LocalSetting ...

  8. SpringBoot 打包为war包启动时导入外部配置文件

    最近在做一个SpirngBoot的项目,要求服务器部署的时候使用tomcat启动war包的时候需要导入一个指定位置的application.properties文件.在网上查找了相关的问题之后,发现大 ...

  9. 预发环境与生产环境共享数据库时定时任务重复执行问题解决

    背景: 为保证预发环境的真实性,预发与生产环境往往共享数据库,在定时任务列表中,预发与生产环境都会从任务列表中获取定时任务,然后执行,这会导致定时任务会执行重复. 解决方法: 在job中增加一个环境变 ...

  10. Linux中的计划任务—Crontab调度重复执行的任务

    文章目录 目标 背景介绍 Crontab是什么 Crontab实践 安装并检查Crontab服务 1.检查cron服务: 2.安装cron 案例实现 Crontab的基本组成 Crontab的配置文件 ...

最新文章

  1. 「分布式」艺术创作:20分钟+1080显卡,这个AI就能创造复杂作品 | 开源
  2. 2011寒假-操作系统学习笔记
  3. flask读取数据库(mysql)并展示表格(讲解获取表头的方法)【附上flask好看点的helloworld】
  4. 高效java工具类总结
  5. DOM——获取元素的方式
  6. Base64 的 JavaScript 实现 js-base64
  7. 鼠标移动到曲线图上显示值
  8. 神州十三号就位,小火箭先去探探路
  9. 利用PaddleOCR实现摄像头实时OCR
  10. DZZ云桌面1.3下载 多图介绍
  11. 大学概率论与数理统计知识点详细整理
  12. Vim 插件管理工具 pathogen
  13. 《网络是怎样连接的》-----户根勤,读书笔记
  14. 使用xshell登陆腾讯云主机
  15. 【OpenIM原创】uni-app使用之 初始化会话 消息 好友 监听器
  16. 磨金石教育摄影技能干货分享|什么是序列摄影?它让摄影更加深刻
  17. python 拦截windows弹窗广告_win10怎么阻止弹窗广告拦截功能的方法
  18. 直播APP开发详细内容
  19. 12.27追求世俗意义上的成功与心灵快感的矛盾
  20. 组合电路中的竞争与冒险

热门文章

  1. docker 中文文档
  2. 数据库设计 | 需求分析
  3. 非接触IC卡读写模块MFRC530的工作原理及其应用
  4. 裂变新玩法 2022年京东双十一红包如何领取?
  5. 大运期间寄往深圳邮件需出示有效身份证件
  6. C#小知识之中英文转换、去空格
  7. --随笔--带你轻松理解TCP中的三次握手
  8. Oracle获取两时间的相差天数
  9. 图论 二分图 小世界网络 语义网络
  10. 超简单一行代码实现应用双开,仿照微信双开、QQ双开等实现app应用双开,即采用Android插件化开发在免安装情况下加载使用原生app