外部统一管理可用 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. 【发布】DDD 工程脚手架 + 一键安装分布式技术栈环境!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 大家好,我是技术UP主小傅哥. 写了那么多案例工程,开发了那么多技术项目.那小傅哥做的这些案例 ...

  2. 一文概览NLP句法分析:从理论到PyTorch实战解读

    关注TechLead,分享AI全维度知识.作者拥有10+年互联网服务架构.AI产品研发经验.团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI ...

  3. C.C++作用域和static用法

    C++ 变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为 6 种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域. 从作用域看: 全局变量具有全局作用域.全 ...

  4. C语言从键盘上输入年份和月份,计算并输出这一年的这一月共有多少天。

    #include<stdio.h> void main() { int y, n, s = 0;//定义变量 scanf_s("%d-%d", &y, & ...

  5. C语言从键盘上输入一个梯形的上底a、下底b和高h,输出梯形的面积。

    #include<stdio.h> int main() { double a, b, h, s;//定义变量,上底,下底,高,面积 scanf_s("%lf,%lf,%lf&q ...

  6. STM32一个定时器输出四路不同频率和占空比PWM波的方法

    一般来说,一个定时器输出4路频率相同.占空比不同的PWM波是比较容易的,使用PWM模式即可实现.如果说是输出4路频率不同.占空比不同的PWM就没有现成的模式,是不是无法实现了呢?答案肯定是" ...

  7. 【生活技巧记录】歌词Lyric生成及音乐标签嵌入

    前置工具准备: BesLyric:一款专门制作 网易云音乐 LRC 滚动歌词的软件! 搜索.下载.制作 歌词更方便! Foobar 2000:一款适用于 Windows 平台的高级免费软件音频播放器 ...

  8. 聊一聊 .NET高级调试 中的一些内存术语

    一:背景 1. 讲故事 在高级调试的旅程中,经常会有一些朋友问我什么是 工作集(内存),什么是 提交大小,什么是 Virtual Size, 什么是 Working Set ...截图如下: 既然有很 ...

  9. Tampermonkey(油猴)的获取方法

    介绍: Tampermonkey中有大量的脚本,可以方便我们在日常的上网使用. 有那么一句话说:没有了Tampermonkey(油猴)我都不知道该如何上网. 获取Tampermonkey的步骤: 1. ...

  10. C++ Qt开发:QItemDelegate 自定义代理组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QStyled ...