定时任务
一、定时任务
1、cron表达式
语法:秒 分 时 日 月 周 年(Spring 不支持)
cron表达式是由6或7个由空格分隔的字段组成的字符串。字段可以包含任何允许的值,以及该字段允许的特殊字符的各种组合。字段如下所示
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天:例如,工作日字段中6#3的值表示这个月的第三个星期五(第6天=星期五,#3 =这个月的第三个星期五)。其他例子:2#1 =每月的第一个星期一,4#5 =每月的第五个星期三。请注意,如果您指定了#5,并且当月的每周没有5天,那么当月就不会生效。
合法字符以及月份和星期的名称不区分大小写。MON和mon是一个意思。
3、Cron示例
4、Springboot整合定时任务
利用Spring自带的定时任务
@Slf4j
@Component
@EnableScheduling
public class HelloScheduled {
@Scheduled(cron = "* * * * * ?")
public void hello() {
log.info("hello.....");
}
}
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
使用异步+定时任务完成定时任务不阻塞的功能
原文地址:https://www.cnblogs.com/cg-ww/p/15449795.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- c语言函数指针的理解与使用
- Python爬虫基础
- Python算法基础
- pytorch读取一张图像进行分类预测需要注意的问题(opencv、PIL)
- 【LeetCode】旋转数组的最小数字day08
- 【原创】Spring Boot集成Redis的玩法
- 当前页面是否可见
- 【LeetCode】两数之和day09
- 【原创】SpringBoot快速整合Thymeleaf模板引擎
- 【leetCode】打印从1到最大的n位数day10
- 你真的了解Java中的String吗(也太菜了)?
- 【设计模式】变化和不变化的代码进行分离day01
- isObject
- 【leetCode】股票的最大利润day12
- Spring Boot 集成 Druid 监控数据源