Spring Task
Spring Task是Spring框架提供达到任务调度工具,可按照约定时间自动执行某个代码逻辑
使用步骤

样例
在方法体上使用注解
java
/**
* 处理超时订单的方法
*/
@Scheduled(cron = "0 * * * * ?") //每分钟触发一次
public void processTimeoutOrder(){
Log.info("定时处理超时订单:{}", LocalDateTime.now());
LocalDateTime time = LocalDateTime.now().plusMinutes(-15);
// select * from orders where status = ? and order_time < (当前时间 - 15分钟)
List<Orders> ordersList = orderMapper.getByStatusAndOrderTimeLT(Orders.PENDING_PAYMENT, time);
if(ordersList != null && ordersList.size() > 0){
for (Orders orders : ordersList) {
orders.setStatus(Orders.CANCELLED);
orders.setCancelReason("订单超时,自动取消");
orders.setCancelTime(LocalDateTime.now());
orderMapper.update(orders);
}
}
}
cron表达式
在线生成器网址 https://cron.qqe2.com/
cron 表达式是一个字符串,用于定义任务触发的时间。
构成规则
- 分为 6 或 7 个域,由空格分隔,每个域代表一个含义
- 各域含义(从左到右):秒、分钟、小时、日、月、周、年(年为可选)
示例对应关系
| 秒 | 分钟 | 小时 | 日 | 月 | 周 | 年 |
|---|---|---|---|---|---|---|
| 0 | 0 | 9 | 12 | 10 | ? | 2022 |
对应触发时间:2022 年 10 月 12 日上午 9 点整
对应的 cron 表达式:0 0 9 12 10 ? 2022