介绍:
Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。
应用场景:
- 信用卡每月还款提醒
- 银行贷款每月还款提醒
- 火车票售票系统处理未支付订单
- 入职纪念日为用户发送通知
cron表达式
cron表达式其实就是一个字符串,通过cron表达式可以定义任务触发的时间
构成规则:分为6或7个域,由空格分隔开,每个域代表一个含义
每个域的含义分别为:秒、分钟、小时、日、月、周、年(可选)
cron表达式在线生成器:
Spring Task使用步骤:
① 导入maven坐标 spring-context (spring-boot-stater 已包含)
②启动类添加注解@EnableScheduling 开启任务调度
③ 自定义定时任务类
@Component
@Slf4j
public class OrderTask {
@Autowired
private AdminOrderMapper adminOrderMapper;
@Autowired
private UserOrderMapper userOrderMapper;
/**
* 订单超时"15分钟"自动取消
*/
@Scheduled(cron = "0 * * * * ?")
public void OrderTimeoutHandle() {
LocalDateTime dateTime = LocalDateTime.now().plusMinutes(-15);
List<Orders> ordersList = adminOrderMapper.SelectOrderTimeout(Orders.PENDING_PAYMENT, dateTime);
ordersList.forEach(item -> {
item.setStatus(Orders.CANCELLED);
item.setCancelReason(MessageConstant.ORDER_TIMEOUT);
item.setCancelTime(LocalDateTime.now());
userOrderMapper.update(item);
log.info(MessageConstant.ORDER_TIMEOUT + ":{}", item.getNumber());
});
}
/**
* 订单自动确认收货
*/
@Scheduled(cron = "0 0 1 * * ?")
public void OrderAutoReceiveGoodsHandel() {
LocalDateTime dateTime = LocalDateTime.now().plusMinutes(-120);
List<Orders> ordersList = adminOrderMapper.SelectOrderTimeout(Orders.DELIVERY_IN_PROGRESS, dateTime);
ordersList.forEach(item -> {
item.setStatus(Orders.COMPLETED);
item.setDeliveryTime(LocalDateTime.now());
userOrderMapper.update(item);
log.info(MessageConstant.ORDER_AUTO_RECEIVE_GOODS + ":{}", item.getNumber());
});
}
}
- THE END -
最后修改:2024年5月2日
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.forest88.top/2024/05/01/spring-task-%e5%ae%9a%e6%97%b6%e4%bb%bb%e5%8a%a1/
共有 0 条评论