1.Spring task介绍
Spring task是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。
作用:定时自动执行某段Java代码
2.cron表达式
cron表达式其实就是一个字符串,通过cron表达式可以定时任务触发的时间
构成规则:;分成6个或7个域,由空格分隔开,每个域代表一个含义
含义分别为:秒、分钟、小时、日、月、周、年(可选)

3.订单状态定时处理

java
@Scheduled(cron = "0 * * * * ?")//每分钟执行一次
public void processTimeoutOrder() {
log.info("定时处理超时订单:{}", LocalDateTime.now());
List<Orders> ordersList = orderMapper.getByStatusAndOrderTimeLT(Orders.PENDING_PAYMENT, LocalDateTime.now().plusMinutes(-15));
if(ordersList!=null&&ordersList.size()>0){
for (Orders orders : ordersList) {
orders.setStatus(Orders.CANCELLED);
orders.setCancelReason("支付超时");
orders.setCancelTime(LocalDateTime.now());
orderMapper.update(orders);
}
}
}
@Scheduled(cron = "0 0 1 * * ?")//每日1点执行一次
public void processDeliveryOrder() {
log.info("定时处理处于派送状态的订单:{}", LocalDateTime.now());
List<Orders> ordersList = orderMapper.getByStatusAndOrderTimeLT(Orders.DELIVERY_IN_PROGRESS, LocalDateTime.now().plusMinutes(-60));
if(ordersList!=null&&ordersList.size()>0){
for (Orders orders : ordersList) {
orders.setStatus(Orders.COMPLETED);
orderMapper.update(orders);
}
}
}