• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于java:Java-实现订单未支付超时自动取消

java 搞代码 4年前 (2022-01-27) 65次浏览 已收录 0个评论
文章目录[隐藏]

在电商上购买商品后,如果在下单而又没有领取的状况下,个别提醒30分钟实现领取,否则订单主动。比方在京东下单为实现领取:

超过24小时,就会主动勾销订单,上面应用 Java 定时器实现超时勾销订单性能。

  • Timer 定时器
    Timer 是一个调度工作的执行的工具,工作能够一次性定时执行或者定时反复执行,零碎会启动一个线程来执行所有的定时工作。
  • TimerTask 定时工作

TimerTask 是一个抽象类,它实现了 Runnable,实现 Runnable 也就是创立了多线程工作。

创立 TimerTask

TimerTask 是抽象类,形象是为了代码复用,要创立一个类继承 TimerTask:

public class CancelOrderTimeTask extends TimerTask {

    private Long id;

    public CancelOrderTimeTask(long id) {
        this.id = id;
    }


    @Override
    public void run() {
        // 执行勾销订单
        cancelOrder(id); 
        System.out.println(getCurrentTime() + " 工夫勾销订单,订单id:" + id);

    }

    private String getCurrentTime() {
        SimpleDateFormat sdf = new SimpleDateFormat();
        sdf.applyPattern("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        return sdf.format(date);
    }
}

run 办法执行订单勾销工作。

因为这个办法不是创立 bean,所以在调用的 dao 或者其余的 bean 时,要应用 ApplicationContext 获取 bean。

Timer 定时器调用 TimerTask

新建 Timer,应用 schedule 办法调用,办法有两个参数,第一个是工作的实例,另一个是提早多久后调用工作,单位是毫秒。代码如下:

@RestController
public class TimerController {


    @GetMapping("/timer")
    public String timer(long id) {
        Timer timer = new Timer();
        CancelOrderTimeTask timeTask = new CancelOrderTimeTask(id);
        System.out.println("以后工夫是" + getCurrentTime());
        //10秒后执行工作
        timer.schedule(timeTask,10 * 1000);
        return "ok";
    }

    private String getCurrentTime() {
        SimpleDateFormat sdf = new SimpleDateFormat();
        sdf.applyPattern("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        return sdf.format(date);
    }
}

调用办法后,控制台输入如下内容,阐明定时调用胜利。

以后工夫是2022-01-24 00:05:09
2022-01-24 00:05:19 工夫勾销订单,订单id:3

总结

  • 首先创立定时工作,继承 TimerTask,在 run 办法外面写业务逻辑。
  • 应用 Timer 调用 schedule 办法, schedule 办法写入 TimerTask 实例以及延迟时间。

源码

github源码

如果感觉文章对你有帮忙的话,请点个赞吧!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于java:Java-实现订单未支付超时自动取消

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址