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

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

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

Spring 自带的 Schedule 用法

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

多线程定时任务

@Component
@EnableScheduling
@EnableAsync
public class CronTask3 {
Logger taskLogger = LoggerFactory.getLogger("crontabTask_3"); @Async
@Scheduled(fixedDelay = 10000) //间隔10秒
public void first() throws InterruptedException {
System.out.println("第一个定时任务开始 : " + LocalDateTime.now().toLocalTime() + "\r\n线程 : " + Thread.currentThread().getName());
taskLogger.info("第一个基于注解设定多线程定时任务");
Thread.sleep(1000 * 10);
} @Async
@Scheduled(fixedDelay = 20000)
public void second() {
System.out.println("第二个定时任务开始 : " + LocalDateTime.now().toLocalTime() + "\r\n线程 : " + Thread.currentThread().getName());
taskLogger.info("第二个基于注解设定多线程定时任务"); }
}

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. 一个java文件的JVM之旅

    准备 我是小C同学编写得一个java文件,如何实现我的功能呢?需要去JVM(Java Virtual Machine)这个地方旅行. 变身 我高高兴兴的来到JVM,想要开始JVM之旅,它确说:&quo ...

  2. Electron原生菜单

    .markdown-body { color: rgba(56, 56, 56, 1); font-size: 15px; line-height: 30px; letter-spacing: 2px ...

  3. 🔥🔥Java开发者的Python快速进修指南:控制之if-else和循环技巧

    简单介绍 在我们今天的学习中,让我们简要了解一下Python的控制流程.考虑到我们作为有着丰富Java开发经验的程序员,我们将跳过一些基础概念,如变量和数据类型.如果遇到不熟悉的内容,可以随时查阅文档 ...

  4. Java——设计模式

    一.概述 设计模式是历代程序员总结出的经验 二.分类 创建型模式:简单工厂模式 工厂方法模式 单例模式:饿汉式(开发) 懒汉式(面试) 行为型模式 结构型模式 三.简单工厂模式 一个工厂中可以创建很多 ...

  5. 聊聊分布式 SQL 数据库Doris(六)

    负载均衡 此处的负载均衡指的是FE层的负载均衡. 当部署多个 FE 节点时,用户可以在多个 FE 之上部署负载均衡层来实现 Doris 的高可用.官方文档描述: 负载均衡 . 实现方式 实现方式有多种 ...

  6. [ABC328D] Take ABC 题解

    题目翻译 题目描述 给你一个字符串 \(S\) 包含 A.B 和 C 三个不用的字符. 只要字符串 \(S\) 中包含连续的 ABC 就将 ABC 删除掉 再字符串 \(S\) 不能操作之后输出这个字 ...

  7. 无序对的GCD

    求\(\sum_{i = 1}^n \sum_{j = i+1}^n GCD(a_i, a_j)\) \(N\)为上确界,\(n\)为\(a\)数组元素个数,\(D\)为约数个数. 方法一 \(1.\ ...

  8. 安卓之各组件的LayoutParams分析

    文章摘要 在Android开发中,LayoutParams是一个非常重要的概念,它用于描述View在其父容器中的布局行为.不同的ViewGroup有不同的LayoutParams子类,例如Linear ...

  9. Celery 定义和调用异步任务Task

    https://docs.celeryq.dev/en/stable/userguide/tasks.html 使用app.task装饰器定义 需要通过导入celery app,然后使用@app.ta ...

  10. 【Python】【OpenCV】凸轮廓和Douglas-Peucker算法

    针对遇到的各种复杂形状的主体,大多情况下,我们可以求得一个近似的多边形来简化视觉图像处理,因为多边形是由直线组成的,这样就可以准确的划分区域来便捷后续的操作. cv2.arcLength() Meth ...