外部统一管理可用 xxl-job ,将各定时任务集中管理,灵活改变执行频率,支持某一个定时器集群处理,避免多服务启动时,每个服务都执行(重复执行)

比如我的API服务里有一个定时任务,将API做成集群时,变成了 API1、API2、API3 ,这时候每个API都有定时任务。但我只能让一个执行,不能也没必要三个API都执行。就只能将定时任务独立成一个 应用发布,或者发布时只开启一个,另外两个不开启。

有了XXL-JOB,1、2、3只会轮训执行一次。

Spring 自带的 Schedule 用法

  1. @Component
  2. @EnableScheduling
  3. public class CronTask1 {
  4. Logger taskLogger = LoggerFactory.getLogger(this.getClass());
  5.  
  6. /**
  7. * @Scheduled除过cron还有三种方式:fixedRate,fixedDelay,initialDelay
  8. * cron:表达式可以定制化执行任务,但是执行的方式是与fixedDelay相近的,也是会按照上一次方法结束时间开始算起。
  9. * fixedRate:控制方法执行的间隔时间,是以上一次方法执行完开始算起,如上一次方法执行阻塞住了,那么直到上一次执行完,并间隔给定的时间后,执行下一次。
  10. * fixedDelay:是按照一定的速率执行,是从上一次方法执行开始的时间算起,如果上一次方法阻塞住了,下一次也是不会执行,但是在阻塞这段时间内累计应该执行的次数,当不再阻塞时,一下子把这些全部执行掉,而后再按照固定速率继续执行。
  11. * initialDelay:initialDelay = 10000 表示在容器启动后,延迟10秒后再执行一次定时器。
  12. */
  13. @Scheduled(cron = "*/6 * * * * ?")
  14. public void crontabTask() {
  15. taskLogger.info("这是基于注解的方式的定时任务" + new Date());
  16. }
  17.  
  18. //内部控制,可加条件判断是否要启用
  19. @Override
  20. public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
  21. scheduledTaskRegistrar.addTriggerTask(() -> process(),
  22. triggerContext -> {
  23. //每隔1分钟执行一次
  24. String cron = "10,20 * * * * ?";
  25. return new CronTrigger(cron).nextExecutionTime(triggerContext);
  26. });
  27. }
  28. private void process() {
  29. String info = "这是基于接口的定时任务";
  30. System.out.println(info);
  31. taskLogger.info(info);
  32. }
  33.  
  34. }

多线程定时任务

  1. @Component
  2. @EnableScheduling
  3. @EnableAsync
  4. public class CronTask3 {
  5. Logger taskLogger = LoggerFactory.getLogger("crontabTask_3");
  6.  
  7. @Async
  8. @Scheduled(fixedDelay = 10000) //间隔10秒
  9. public void first() throws InterruptedException {
  10. System.out.println("第一个定时任务开始 : " + LocalDateTime.now().toLocalTime() + "\r\n线程 : " + Thread.currentThread().getName());
  11. taskLogger.info("第一个基于注解设定多线程定时任务");
  12. Thread.sleep(1000 * 10);
  13. }
  14.  
  15. @Async
  16. @Scheduled(fixedDelay = 20000)
  17. public void second() {
  18. System.out.println("第二个定时任务开始 : " + LocalDateTime.now().toLocalTime() + "\r\n线程 : " + Thread.currentThread().getName());
  19. taskLogger.info("第二个基于注解设定多线程定时任务");
  20.  
  21. }
  22. }

SpringBoot Scheduled 常见用法的更多相关文章

  1. Linux中find常见用法

    Linux中find常见用法示例 ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数 ...

  2. php中的curl使用入门教程和常见用法实例

    摘要: [目录] php中的curl使用入门教程和常见用法实例 一.curl的优势 二.curl的简单使用步骤 三.错误处理 四.获取curl请求的具体信息 五.使用curl发送post请求 六.文件 ...

  3. Guava中Predicate的常见用法

    Guava中Predicate的常见用法 1.  Predicate基本用法 guava提供了许多利用Functions和Predicates来操作Collections的工具,一般在 Iterabl ...

  4. find常见用法

    Linux中find常见用法示例 ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数 ...

  5. iOS 开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

  6. iOS开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

  7. [转]EasyUI——常见用法总结

    原文链接: EasyUI——常见用法总结 1. 使用 data-options 来初始化属性. data-options是jQuery Easyui 最近两个版本才加上的一个特殊属性.通过这个属性,我 ...

  8. NSString常见用法总结

    //====================NSStirng 的常见用法==================== -(void)testString { //创建格式化字符串:占位符(由一个%加一个字 ...

  9. [转]Linux中find常见用法示例

    Linux中find常见用法示例[转]·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;find命令的参 ...

  10. [转载]typedef常见用法

    注:本文系转载,并修改了一些错误. typedef常见用法 1.常规变量类型定义 例如:typedef unsigned char uchar描述:uchar等价于unsigned char类型定义 ...

随机推荐

  1. GCD Inside: GCD 数据结构

    1 OS_object OS_object由下面宏OS_OBJECT_DEC_BASE扩展而来: // 1. os/object.h OS_OBJECT_DECL_BASE(object, NSObj ...

  2. Android 面试知识总结

    Android知识点 1. 四大组件 分别是Activity.Service.ContentProvider.BroadcastReceiver. Activity称为活动,属于展示型组件,主要负责显 ...

  3. mysql--基础管理

    1.docker环境登录mysql PS C:\WINDOWS\system32> docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS P ...

  4. Java 21 官方速览:全面拥抱虚拟线程

    前言 首先,感谢一下不少xdm私信关心我的身体状况,我也不是什么厉害的大佬,点开通知看到一堆私信还是蛮感动的. 近来有意大幅缩短了更新频率,增加了日常调养身体的时间,淋巴结确实变小了,睡眠也逐渐正常, ...

  5. vim的各种快捷键

    目录 一.准备一份用于练习的文件 二.命令模式下的快捷键 1.移动光标 2.删除文字 3.复制粘贴 4.撤销上一次操作 5.恢复上一次撤销的操作 6.查找 7.替换单个字符 8.光标移动到最左边 9. ...

  6. serdes与PCIE的区别

    serdes和PCIE是两种非常常见的总线.因为PCIE也是差分信号传输,所以做硬件时比较难区别PCIE和serdes的具体差异点. 两者之间的区别主要表现在以下几点: 1.PCIE使用了SERDES ...

  7. [USACO2007NOVS] Milking Time S

    题目描述 Bessie 可以在接下来 \(N\) 个小时内产奶,为了方便,我们把这 \(N\) 个小时 \(0\dots N-1\) 编号. FJ 在这 \(N\) 个小时内有 \(M\) 段时间可以 ...

  8. [ABC282Ex] Min + Sum

    Problem Statement You are given two sequences of integers of length $N$: $A = (A_1, A_2, \ldots, A_N ...

  9. [ABC262G] LIS with Stack

    Problem Statement There is an empty sequence $X$ and an empty stack $S$. Also, you are given an inte ...

  10. zookeeper JavaApi 修改节点

    *修改数据 * 1.修改数据 * 2.根据版本修改 * * * */ @Test public void testSet() throws Exception{ Stat stat = new Sta ...