Java实现订单未支付超时自动取消订单比如你在京东下单完成支付:如果超过24小时,订单会自动取消。接下来使用Java定时器实现超时取消订单的功能。TimerTimer是一个用于调度任务执行的工具。任务可以执行一次或重复执行。系统会启动一个线程来执行所有的定时任务。TimerTask定时任务TimerTask是一个实现了Runnable的抽象类,实现Runnable就是创建一个多线程任务。创建TimerTaskTimerTask是一个抽象类,抽象是为了代码复用,创建一个继承TimerTask的类:publicclassCancelOrderTimeTaskextendsTimerTask{privateLongid;publicCancelOrderTimeTask(longid){this.id=id;}@Overridepublicvoidrun(){//执行取消订单cancelOrder(id);System.out.println(getCurrentTime()+"取消订单时间,订单id:"+id);}privateStringgetCurrentTime(){SimpleDateFormatsdf=newSimpleDateFormat();sdf.applyPattern("yyyy-MM-ddHH:mm:ss");日期date=newDate();返回sdf.format(日期);}}在run方法中执行取消订单任务。因为这个方法不是创建bean,所以在调用dao或者其他bean的时候,使用ApplicationContext来获取bean。Timer定时器调用TimerTask创建一个新的Timer,使用schedule方法调用。该方法有两个参数,第一个是任务的实例,另一个是延迟多长时间后调用任务,以毫秒为单位。代码如下:@RestControllerpublicclassTimerController{@GetMapping("/timer")publicStringtimer(longid){Timertimer=newTimer();CancelOrderTimeTasktimeTask=newCancelOrderTimeTask(id);System.out.println("当前时间是"+getCurrentTime());//10秒后执行任务timer.schedule(timeTask,10*1000);返回“确定”;}privateStringgetCurrentTime(){SimpleDateFormatsdf=newSimpleDateFormat();sdf.applyPattern("yyyy-MM-ddHH:mm:ss");日期date=newDate();返回sdf.format(日期);}}调用方法后,控制台输出如下内容,表示定时调用成功。当前时间是2022-01-2400:05:092022-01-2400:05:19取消订单的时间,订单id:3总结先创建一个定时任务,继承TimerTask,业务逻辑写在运行方法。使用Timer调用schedule方法,schedule方法写入TimerTask实例和延时时间。源码github源码如果觉得文章对您有帮助,请点个赞!
