定时任务

简介: 定时任务

一、定时任务

1、cron表达式

语法:秒 分 时 日 月 周 年(Spring 不支持)

cron表达式是由6或7个由空格分隔的字段组成的字符串。字段可以包含任何允许的值,以及该字段允许的特殊字符的各种组合。字段如下所示

960bf3e9eb6c11c613eb979accb64f37_202110231148144.png

Cron Trigger Tutorial (quartz-scheduler.org)

2、特殊字符含义

*表示所有值:用于选择字段中的所有值。例如,分钟字段中的表示每分钟

?表示没有特定的值: 当你需要在允许字符的两个字段中指定某一个字段,而不是另一个字段时很有用。例如,如果我想让触发器在一个月的某一天(比如10日)触发,但不关心那是一周中的哪一天,那么我将在month -of- day字段中输入10

- 用于指定范围:例如,小时字段中的10-12表示小时10、11和12。

, 用于指定附加值:例如,MON,WED,FRI在星期字段中表示星期一、星期三和星期五。

/ 用于指定增量:例如,seconds字段中的“0/15”表示“秒0、15、30和45”。秒字段中的“5/15”表示“秒5、20、35和50”。你也可以在“字符”后面指定“/”——在这种情况下,相当于在“/”之前有“0”。“1/3”在month -of- day字段中的意思是“从每月的第一天开始,每3天开始一次”。

L (" last ") 在允许的两个字段中都有不同的含义:例如,day-of-month字段中的值“L”表示“这个月的最后一天”——在非闰年中,1月的31天表示1月,2月的28天表示2月。如果在工作日字段中单独使用,则表示“7”或“SAT”。但是,如果在周中的一天字段中使用另一个值,则表示“这个月的最后xxx天”——例如,“6L”表示“这个月的最后一个星期五”。您还可以指定从一个月的最后一天开始的偏移量,例如“L-3”,这意味着日历月的第三天到最后一天。

W (weekday) 用于指定离给定日期最近的工作日(周一至周五):例如,如果要指定15W作为month -of- day字段的值,则其含义是:一个月中离15号最近的工作日。所以如果15号是周六,触发器就会在14号周五发射。如果15日是周日,触发器将在16日星期一触发。如果15号是星期二,那么它就会在15号星期二发射。但是,如果您指定1W作为每月的日值,并且第1个是星期六,触发器将在第3个星期一触发,因为它不会跳过边界

“L”和“W”字符也可以在month -of- day字段中组合成“LW”,即“这个月的最后一个工作日”

用于指定一个月的第n XXX天:例如,工作日字段中63的值表示这个月的第三个星期五(第6天=星期五,3 =这个月的第三个星期五)。其他例子:21 =每月的第一个星期一,45 =每月的第五个星期三。请注意,如果您指定了5,并且当月的每周没有5天,那么当月就不会生效。

合法字符以及月份和星期的名称不区分大小写。MON和mon是一个意思。

3、Cron示例

a3f2c1b390696fdea7bb5ec5446dbc53_202110231158844.png

4、Springboot整合定时任务

利用Spring自带的定时任务

@Slf4j
@Component
@EnableScheduling
public class HelloScheduled {
    @Scheduled(cron = "* * * * * ?")
    public   void  hello() {
        log.info("hello.....");
    }
}

a3d600739ee508b6caf709117dd2c16e_202110231431339.png

Spring中cron只有6位,并且1-7代表周一到周七

二、异步定时任务

定时任务默认是阻塞的,但是不应该阻塞,解决办法

  • 可以让业务运行以异步的方式,自己提交到线程池
CompletableFuture.runAsync(()->{
            xxxservice.hello();
        },executor);
  • 支持定时任务的线程池
spring.task.execution.pool.core-size=5
spring.task.execution.pool.max-size=50
  • 让定时任务异步执行
@EnableAsync
@Async

33633573458399288ab3bbc953ea0867_202110231501936.png

使用异步+定时任务完成定时任务不阻塞的功能

相关文章
|
编解码 算法 文件存储
浅谈动图文件格式 - GIF
介绍动图的文件格式,及其优劣
2559 0
浅谈动图文件格式 - GIF
|
存储 人工智能 安全
阿里云oss简介和如何对接使用
阿里云对象存储服务(Alibaba Cloud Object Storage Service,简称OSS)是阿里云提供的一种安全、稳定、高效的对象存储服务。它支持多元数据存储、持久化存储和共享访问,并且具有无限的扩展性和备份恢复能力。阿里云OSS适用于各类场景,如云计算、大数据分析、人工智能等,并且具备高可用性、高可扩展性和低成本等优势。
14729 2
|
SQL 缓存 Java
MyBatis-实际案例
MyBatis-实际案例
MyBatis-实际案例
SAP采购发票跨期冲销问题的解决方案
笔者在实际工作中用户反馈在月初做上月的采购发票冲销时,冲到了本月,造成供应商上期有余额,询问如何处理?解决后我把解决方案记录下供大家参考!!
SAP采购发票跨期冲销问题的解决方案
|
存储 监控 算法
微信Windows端IM消息数据库的优化实践:查询慢、体积大、文件损坏等
本文分享的是,微信客户端团队基于对微信用户日常使用场景和数据分析,通过分离重要和非重要数据、采用可靠的分库策略等,对微信Windows端IM本地数据库的架构进行的优化和改造,并最终得到一个具备良好实践效果的技术改造方案。
602 0
微信Windows端IM消息数据库的优化实践:查询慢、体积大、文件损坏等
|
SQL 存储 缓存
BPMN工作流的基本概念!详解工作流框架Activiti
本文介绍了工作流的基本概念,对工作流中的相关术语,例如工作流引擎,BPM,BPMN以及流对象进行说明。着重介绍了当下非常流行的工作流框架Activiti,重点介绍了工作流框架Activiti的服务结构,工作流组件,流程虚拟机PVM以及工作流框架的架构和使用特点。通过这篇文章,可以对工作流有一个基本的认识,为后续工作流框架Activiti的学习打下坚实的基础。
1314 0
BPMN工作流的基本概念!详解工作流框架Activiti
|
存储 SQL 开发框架
软考——软件设计师:第二章:数据库技术考点总结(完整篇)(上)
软考——软件设计师:第二章:数据库技术考点总结(完整篇)(上)
软考——软件设计师:第二章:数据库技术考点总结(完整篇)(上)
|
机器学习/深度学习 编解码 算法
PixelAI移动端实时人像分割 优酷端侧弹幕穿人技术实战系列
PixelAI移动端实时人像分割 优酷端侧弹幕穿人技术实战系列
972 0
PixelAI移动端实时人像分割 优酷端侧弹幕穿人技术实战系列