定时任务Spring Task&双向数据传输WebSocket

        之前的代码已完成基础功能,但仍有一些逻辑未完善:

定时任务:

  • 用户下单15分钟后仍未支付,订单判定为超时。status应修改为6(已取消)。
  • 管理端忘记点击"完成",使订单长时间处于"派送中"状态。系统需每天定时清理该类订单,status修改为5(已完成)。

        可使用Sping框架提供的工具Spring Task来定时处理一些任务。

弹窗任务:

  • 来单提醒:用户下单并支付后,管理端需弹出窗口提示有新订单。
  • 客户催单:用户下单并支付后,可点击"催单",管理端会弹出窗口提示接单。

        可以通过WebSocket协议来实现客户端浏览器和服务器之间进行双向的数据传输。

Spring Task

        Spring Task是Spring框架提供的一个任务调度工具,可以按照约定的时间自动执行某个代码逻辑,属于定时任务框架。 其作用类似于手机上的闹钟,即定时自动执行指定的java代码。

        指定代码要在哪个时间点触发可以通过cron表达式来确定。

cron表达式

        Cron表达式是一个强大的时间表达式,用于定义定时任务的执行时间。它由六个或七个字段(域)组成,中间以空格分隔,每个字段代表一个时间单位,分别为秒、分、时、日、月、周、年(其中年可选)。其本质上就是一个字符串,通过cron表达式可以定义任务触发的时间

        Cron表达式中使用了一些特殊字符来表示复杂的时间规则:

  • 星号(*):表示所有可能的值。例如,在“小时”字段中,*表示每小时。
  • 问号(?):表示不指定的值,只能用于日和周字段。例如在周字段中使用?,表示不指定具体是周几。
  • 连字符(-):表示一个范围。例如,在“小时”字段中,1-5表示从1点到5点。
  • 逗号(,):表示列表值。例如,在“周”字段中,Mon,Wed,Fri表示周一、周三和周五。
  • 斜杠(/):用于指定增量。例如,在“分”字段中,0/15表示从0分钟开始,每15分钟执行一次。

        一些特殊的字符:

  • L:表示最后。只能用于日和月字段。在月字段中表示一个月的最后一天;在周字段中表示一个星期的最后一天(即星期六)。如果L前有具体的内容,如“6L”,则表示该月的倒数第6天。
  • W:表示有效工作日(周一到周五)。只能用于日字段,系统将在离指定日期的最近的有效工作日触发事件。例如在日字段使用5W,如果5日是休息日,则将在最近的工作日(即星期五,4日)触发;如果是工作日,则就在5日触发。
  • LW:表示某个月最后一个工作日,即最后一个星期五。
  • #:用于确定每个月第几个星期几。它只能出现在DayofMonth字段中。例如,“4#2”表示某月的第二个星期三。

        一般日和周字段必须有一个为"?",例如每月1号早上9点执行一次:0 0 9 1 * ?,因为我们无法确定每月1号是周几,所以只能用"?"代替。

        这些只是些常用的字符,还有些特殊的字符我们并不需要去手写,我们可以通过在线生成器来生成cron表达式:

Cron表达式生成器https://cron.ciding.cc/https://cron.ciding.cc/https://cron.ciding.cc/https://cron.ciding.cc/https://cron.ciding.cc/https://cron.ciding.cc/

            以下是一些Cron表达式的示例及其含义:

    • 0 0 12 * * ?:每天中午12点执行一次。
    • 0 15 10 ? * *:每天上午10点15分执行一次。
    • 0 0/30 9-17 * * ?:每天上午9点到下午5点之间,每30分钟执行一次。
    • 0 0 0 1 * ?:每月1号凌晨0点执行一次。
    • 0 0 0 ? * Sun:每周日凌晨0点执行一次。

            接下来我们通过一个案例来了解如何使用Spring Task。

    入门案例

    一、导入maven坐标spring-context(已存在)

            因为Spring Task是一个非常小的框架,以至于其没有单独的jar包,其相关的api都封装在spring-context包下,而在原代码中已经导入了相关的maven坐标。

    二、在启动类添加注解@EnableScheduling开启任务调度

    三、自定义定时任务类

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值