Spring Task 定时任务

天才阿梓 2024-5-1 39 5/1

介绍:

Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。

应用场景:

  • 信用卡每月还款提醒
  • 银行贷款每月还款提醒
  • 火车票售票系统处理未支付订单
  • 入职纪念日为用户发送通知

Spring Task 定时任务

cron表达式

cron表达式其实就是一个字符串,通过cron表达式可以定义任务触发的时间

构成规则:分为6或7个域,由空格分隔开,每个域代表一个含义

每个域的含义分别为:秒、分钟、小时、日、月、周、年(可选)

  cron表达式在线生成器:

https://cron.qqe2.com/

 

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 -

天才阿梓

5月02日14:15

最后修改:2024年5月2日
1

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论