定时任务(corn表达式)

1 需求概述

用户创建支付订单之后,长时间没有支付,需要将订单关闭。现在存在如下的问题

  • 如何确定为长时间未支付的订单:15分钟后

  • 如何自动执行?:定时任务

2 定时任务概述

在实际项目开发中,除了Web应用、SOA服务外,还有一类不可缺少的,那就是定时任务调度。定时任务的场景可以说非常广泛:

  • 某些网站会定时发送优惠邮件;

  • 银行系统还款日信用卡催收款;

  • 某些应用的生日祝福短信等。

那究竟何为定时任务调度,一句话概括就是:在指定的时间规则下,自动执行java方法

定时任务有很多种实现方式:

  • timer

  • 基于quartz框架

  • 基于Spring task的框架

  • 分布式定时任务调度:xxl-job

3 入门案例

1)引导类

引导类上加入注解

@EnableScheduling:开启定时任务支持

2)定时任务类

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 定时任务类
 */
@Component
@Slf4j
public class PaymentJob {

    /**
     * 定时指定的java方法,没有返回和参数
     * eg:每5秒,打印系统时间
     * eg:每1分钟,查询数据库中未支付的订单(时间大于15分钟),调用微信获取支付结果
     */
    @Scheduled(cron = "0/5 * * * * ?")
    public void handle() {
        String now = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
        log.info("当前时间:{}",now);
    }


    //案例演示
    @Scheduled(cron = "0 0/1 * * * ?")
    public void handle() {
        String now = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
        log.info("当前时间:{}",now);
        try {
            //清理超时订单
            ordersService.getPayment();
        }catch (Exception e) {
            log.error(e.getMessage(),e);
        }
    }
}

注意:真实的定时任务代码是写在定时任务类的方法里的,一般都直接调用service。定时任务类写在task包下

4 corn表达式

对于定时任务,我们使用的时候主要是注重两个方面,一个是定时任务的业务,另一个就是Cron表达式。

Cron 表达式支持到六个域 

名称是否必须允许值特殊字符
0-59, - * /
0-59, - * /
0-23, - * /
1-31, - * ? / L W C
1-12 或 JAN-DEC, - * /
1-7 或 SUN-SAT, - * ? / L C #

月份和星期的名称是不区分大小写的。FRI 和 fri 是一样的。 域之间有空格分隔  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值