【使用Spring Task实现定时任务-订单超时】

介绍

在这里插入图片描述

定时任务: 是指在预定的时间间隔或特定时间点自动执行的计算机任务或程序。
业务场景: 像平时使用淘宝时,在进行订单支付的时候,你又在犹豫要不要买,这个订单会有一个剩余支付时间,如果你没在指定时间内进行支付订单,这个订单就会变成已取消状态,这个业务下的订单状态变更就是使用到了定时器这个概念。

在学习定时任务时,首先要学下cron表达式:cron表达式其实是一个字符串,通过cron表达式可以定义任务触发的时间
构成规则: 分成6或7个域,每个域代表一个含义秒、分钟、小时、日、月、周、年(可选)
测试例子: 2024年1月26日下午16点整

分钟小时
00162612024

这只是一个例子,更多详情请看cron官网:https://cron.qqe2.com/

入门案例

实现

第一步:引入依赖

导入Apache POI的maven坐标。

<dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>${mybatis.spring}</version>
</dependency>

在这个SpringBoot的启动依赖里面就存在了core的依赖

在这里插入图片描述

第二步: 在启动类添加注解@EnableScheduling

第三步:自定义定时任务

代码如下:

/**
 * 自定义定时任务类
 */
@Component
@Slf4j
public class MyTask {

    /**
     * 定时任务 每隔5秒触发一次
     */
    @Scheduled(cron = "0/5 * * * * ?")
    public void executeTask(){
        log.info("定时任务开始执行:{}", new Date());
    }
}

运行效果

随着服务器的启动,定时任务类就会根据cron表达式,定时执行。

在这里插入图片描述

苍穹外卖-订单超时解析

问题分析

业务分析: 这是苍穹外卖进行订单支付时,在一定时间内进行支付,订单状态则会变成已支付;否则则会将订单状态变成已取消。这个业务,则是使用了定时任务进行处理,在每一分钟检查订单,检查那些待支付状态下的订单创建时间是否超过了15min。

在这里插入图片描述

处理方法

在这里插入图片描述

处理结果

在这里插入图片描述

总结

这里就带大家了解了定时任务的概念,还有使用了定时任务框架Spring Task,带大家通过简单案例进行说明,也通过了分析苍穹外卖的订单超时这个业务进行分析,让我们明白了定时任务类的作用跟使用情景。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ScheduledExecutorService 是 Java 提供的一个用于定时执行任务的工具类,相比于 Spring Task,它更加灵活,可以实现更加复杂的定时任务逻辑。但是它需要手动创建线程池,需要处理线程安全等问题,使用起来相对比较麻烦。 而 Spring Task 则是 Spring 提供的一个用于定时执行任务的工具,它可以很方便地集成到 Spring 应用中,支持 cron 表达式和简单的固定时间间隔两种方式进行定时任务的配置。使用 Spring Task,我们不需要手动创建线程池,也不需要担心线程安全问题,使用起来比较简单。 下面是使用 Spring Task 实现定时任务的一个示例: 首先,在 SpringBoot 应用的启动类上添加 @EnableScheduling 注解,开启 Spring Task: ```java @SpringBootApplication @EnableScheduling public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 然后在需要执行定时任务的方法上添加 @Scheduled 注解,指定定时任务的执行时间: ```java @Component public class MyTask { @Scheduled(cron = "0 0 0 * * ?") public void run() { // 执行定时任务的逻辑 } } ``` 上面的代码表示每天凌晨 0 点执行一次定时任务。我们可以通过修改 cron 表达式来改变定时任务的执行时间。 需要注意的是,@Scheduled 注解只能用在方法上,而且方法必须是无参的。如果需要传递参数,可以通过注入 Bean 的方式进行。 另外,如果我们需要在应用启动时执行一次定时任务,可以使用 @PostConstruct 注解: ```java @Component public class MyTask { @PostConstruct public void init() { // 执行一次定时任务的逻辑 } } ``` 上面的代码表示在 MyTask 组件初始化完成后执行一次定时任务的逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值