分布式定时任务

news2024/9/24 15:21:02

本文引用了谷粒商城的课程

定时任务

定时任务是我们系统里面经常要用到的一些功能。如每天的支付订单要与支付宝进行对账操作、每个月定期进行财务汇总、在服务空闲时定时统计当天所有信息数据等。
定时任务有个非常流行的框架Quartz和Java原生API的Timer类。Spring框架也可以支持定时任务。

cron表达式

语法:秒 分 时 日 月 周 年(Spring 不支持)
http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html

在这里插入图片描述
特殊字符:
在这里插入图片描述

,:枚举: (cron=“7,9,23 * * * * ?”):任意时刻的 7,9,23 秒启动这个任务;
-:范围: (cron=“7-20 * * * * ?”):任意时刻的 7-20 秒之间,每秒启动一次
()* :任意;指定位置的任意时刻都可以
/:步长; (cron=“7/5 * * * * ?”):第 7 秒启动,每 5 秒一次;(cron=“/5 * * * * ?“):任意秒启动,每 5 秒一次;
?:(出现在日和周几的位置):为了防止日和周冲突,在周和日上如果要写通配符使用?(cron=”
* * 1 * ?”):每月的 1 号,启动这个任务;
L:(出现在日和周的位置)”, last:最后一个 (cron=“* * * ? * 3L”):每月的最后一个周二
W:Work Day:工作日 (cron=“* * * W * ?”):每个月的工作日触发 (cron=“* * * LW * ?”):每个月的最后一个工作日触发
#:第几个 (cron=“* * * ? * 5#2”):每个月的第 2 个周 4

注意:日和周几通常会发生冲突,如果日定了,那么周就要使用?通配符

可以在线生成cron表达式
https://cron.qqe2.com/

cron实例
在这里插入图片描述

SpringBoot整合

 * 1、Spring中6位组成,不允许第7位的年
 * 2、在周几的位置,1-7代表周一到周日:MON-SUN

测试代码如下

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;


/**
 * 定时任务
 *         1、@EnableScheduling开启定时任务
 *         2、@scheduled 开启一个定时任务
 * **/
@EnableScheduling
@Component
@Slf4j
public class HelloSchedule {
    @Scheduled(cron = "*/5 * * * * 4")
    public void hello(){
        log.info("hello.....");

        try {
            Thread.sleep(8000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }
}

但是这里存在一个问题

定时任务不应该阻塞,默认是阻塞的。(也就是要等业务执行完,定时任务才能开始执行)
在这里插入图片描述
可以使用以下几种解决方案
1)、CompletableFuture.runAsync()可以让业务以异步的方式,自己提交到线程池
2)、支持定时任务线程池设置:

spring.task.scheduling.pool.size=5

3)、让定时任务异步执行
通常是采用第3种方案
开启异步定时任务

  • 异步任务
    1、@EnableAsycn:开启异步任务功能
    2、@Async 给希望异步执行的方法上标注上注解
    3、自动配置类 TaskExecutionAutoConfiguration 属性绑定在TaskExecutionProperties
    4、.配置定时任务的线程池属性:
spring.task.execution.pool.core-size=5
spring.task.execution.pool.max-size=30
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;


/**
 * 定时任务
 *         1、@EnableScheduling开启定时任务
 *         2、@scheduled 开启一个定时任务
 * 异步任务
 *         1、@EnableAsycn:开启异步任务功能
 *         2、@Async 给希望异步执行的方法上标注上注解
 *         3、自动配置类 TaskExecutionAutoConfiguration 属性绑定在TaskExecutionProperties
 *         4.配置:
 *              spring.task.execution.pool.core-size=5
 *              spring.task.execution.pool.max-size=30
 * **/
@EnableScheduling
@Component
@Slf4j
@EnableAsync
public class HelloSchedule {

    /**
     * 1、Spring中6位组成,不允许第7位的年
     * 2、在周几的位置,1-7代表周一到周日:MON-SUN
     * 3、定时任务不应该阻塞,默认是阻塞的。(也就是要等业务执行完,定时任务才能开始执行)
     *      1)、CompletableFuture.runAsync()可以让业务以异步的方式,自己提交到线程池
     *      2)、支持定时任务线程池设置:
     *          spring.task.scheduling.pool.size=5
     *      3)、让定时任务异步执行
     *
     *     解决:使用异步+定时任务来完成定时任务不阻塞的功能。
     * **/
    @Async
    @Scheduled(cron = "*/5 * * * * 4")
    public void hello(){
        log.info("hello.....");

        try {
            Thread.sleep(8000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/430869.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【面试题】20个常见的前端算法题,你全都会吗?

现在面试中,算法出现的频率越来越高了,大厂基本必考 今天给大家带来20个常见的前端算法题,重要的地方已添加注释,如有不正确的地方,欢迎多多指正💕 大厂面试题分享 面试题库 前后端面试题库 (…

Spring 6 正式“抛弃”feign

近期,Spring 6 的第一个 GA 版本发布了,其中带来了一个新的特性——HTTP Interface。这个新特性,可以让开发者将 HTTP 服务,定义成一个包含特定注解标记的方法的 Java 接口,然后通过对接口方法的调用,完成 …

Simulink仿真封装中的参数个对话框设置

目录 参数和对话框窗格 初始化窗格 文档窗格 为了更加直观和清晰的分析仿真,会将多个元件实现的一个功能封装在一起,通过参数对话框窗格,可以使用参数、显示和动作选项板中的对话框控制设计封装对话框。如图所示: 参数和对话框…

刘二大人《Pytorch深度学习实践》第六讲逻辑斯蒂回归

文章目录线性回归和逻辑斯蒂回归的区别课上代码交叉熵函数的理解线性回归和逻辑斯蒂回归的区别 线性回归一般用于预测连续值变量,如房价预测问题。 线性回归的一般表达式为: 代价函数为MSE(均方误差): 其中权重thet…

Linux Shell 实现一键部署二进制Rabbitmq

rabbitmq 前言 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代…

openai的whisper语音识别介绍

openAI发布了chatgpt,光环一时无两。但是openAI不止有这一个项目,它的其他项目也非常值得我们去研究学习。 今天说说这个whisper项目 https://github.com/openai/whisper ta是关于语音识别的。它提出了一种通过大规模的弱监督来实现的语音识别的方法。…

C++之深入解析STL unordered_map的底层实现原理

C STL 标准库中,不仅是 unordered_map 容器,所有无序容器的底层实现都采用的是哈希表存储结构。更准确地说,是用“链地址法”(又称“开链法”)解决数据存储位置发生冲突的哈希表,整个存储结构如下所示&…

JVM 垃圾收集器详解

一、垃圾收集器 如果说收集算法是内存回收的方法论,那垃圾收集器就是内存回收的实践者。《Java虚拟机规范》中对垃圾收集器应该如何实现并没有做出任何规定,因此不同的厂商、不同版本的虚拟机所包含的垃圾收集器都可能会有很大差别,不同的虚…

基于遗传算法的中药药对挖掘系统的设计与实现

用数据挖掘技术研究了中药方剂配伍的规律。主要工作:分析了关联规则存在的问题,引入双向关联规则的概念;介绍了遗传算法的基本原理,研究了遗传算法在数据挖掘中的应用;将方剂库转换为位图矩阵,大大提高搜索…

Mac重启清理缓存会怎么样 mac清理缓存怎么清理

众所周知,Mac电脑有着流畅的操作系统,因此,很多用户都会选择使用Mac电脑办公。随着日常使用,系统缓存数据越来越大,某些Mac电脑(尤其是小内存版本的Mac电脑)可能会出现“系统”占存储空间比例较…

初始单片机.md

1.如何将HEX文件烧录到单片机 STC-ISP STC-ISP是一款单片机下载编程烧录软件,是针对STC系列单片机而设计的,可下载STC89系列、12C2052系列和12C5410等系列的STC单片机,使用简便。 思路:将电脑磁盘上已存在的文件通过串口的方式下…

python中第三方库xlrd和xlwt的使用教程

excel文档名称为联系人.xls,内容如下: 一、xlrd模块用法 1.打开excel文件并获取所有sheet import xlrd# 打开Excel文件读取数据 data xlrd.open_workbook(联系人.xls)sheet_name data.sheet_names() # 获取所有sheet名称 print(sheet_name) # [银…

python依次运行多个代码遇到的同步与异步问题

1、要实现在一个Python代码运行完后紧接着运行另一个Python代码,可以使用Python的subprocess模块。该模块可以创建新进程并与之交互,可以用于在Python代码中启动新的程序或脚本。 下面是一个示例代码,用于在运行完code1.py后紧接着运行code2…

论文配色方案(收藏)

方案一:复古 系列色——十六进制颜色码: 0780cf - 765005 - fa6d1d - 0e2c82 - b6b51f - da1f18 - 701866 - f47a75 - 009db2 - 024b51 - 0780cf - 765005 系列色——RGB颜色值: (7,128,207)-(118,80,5&…

【记录】优化油猴插件【BD网盘播放器】

收获最重要前言优化代码收获1.禁止浏览器弹窗2.定时器3.设置属性-隐藏元素4.鼠标悬停和移开事件5.添加元素6.div里均匀分布7.获取元素属性值8.监听播放器状态9.jQuery 选择器前言 有钱的可以支持一下原作者,没钱就要多学习 优化 1.1 视频刚开始未播放时&#xff…

酷雷曼一站式图片直播,助力品牌高效传播

传统模式下,摄影师拍摄会议、活动现场的照片后,一般需要7-10天时间才能完成成片交付,而实际上,由于新闻宣传的即时性,照片延迟交付,远远不能满足客户的需求。因此,即时图片直播技术应运而生&…

Jenkins自动化部署实例讲解

文章目录 前言实例讲解基本环境全局工具配置创建任务任务配置源码管理构建步骤(Build Steps)第一步:调用Maven第二步:执行shell启动容器 后记 前言 你平常在做自己的项目时,是否有过部署项目太麻烦的想法?…

哈希应用——位图(bitset)

目录 见见猪跑(初步了解位图) 位图的模拟实现 位图的应用 1、给定100亿个整数,设计算法找到只出现一次的整数 2、给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集? 3、位图应用变形&#xff…

第六章 Gated RNN

目录6.1 RNN的问题6.1.1 RNN的复习6.1.2 梯度消失和梯度爆炸6.1.3 梯度消失和梯度爆炸的原因6.1.4 梯度爆炸的对策6.2 梯度消失和LSTM6.2.1 LSTM的接口6.2.2 LSTM层的结构6.2.3 输出门6.2.4 遗忘门6.2.5 新的记忆单元6.2.6 输入门6.2.7 LSTM的梯度的流动6.3 LSTM的实现6.4 使用…

CIO成就计划第二季第一期 | 活动回顾:基于数字技术重塑流程,驱动业务增长

2023年3月25日,《科创人》联手金蝶共同打造的【CIO成就计划第二季】首期培训在北京金蝶软件园圆满举行。 【CIO成就计划】第二季,坚持服务于企业CIO、数字化变革负责人的价值定位,通过三期线下闭门培训会社群交流,帮助CIO建立应对…