【SpringBoot篇】Spring_Task定时任务框架

文章目录

  • 🌹概述
  • 🌺应用场景
  • 🎄cron表达式
  • 🛸入门案例
  • 🎍实际应用

在这里插入图片描述

🌹概述

Spring Task 是 Spring 框架提供的一种任务调度和异步处理的解决方案。可以按照约定的时间自动执行某个代码逻辑它可以帮助开发者在 Spring 应用中轻松地实现定时任务、异步任务等功能,提高应用的效率和可维护性。

Spring Task 的主要特点包括:

  • 简单易用:Spring Task 提供了简洁的注解和配置方式,使得任务调度和异步处理变得非常容易上手。
  • 内置支持:Spring Task 内置于 Spring 框架中,无需额外的依赖,开发者可以直接在 Spring 应用中使用。
  • 灵活的任务调度:Spring Task 支持基于 cron 表达式的定时任务调度,能够满足各种复杂的调度需求。
  • 异步任务支持:除了定时任务,Spring Task 也支持异步任务的处理,能够在后台线程中执行耗时操作,提高系统的响应速度。
  • 集成注解:Spring Task 提供了 @Scheduled 注解用于标识定时任务的方法,以及 @Async 注解用于标识异步任务的方法,使用起来非常方便。
  • 监控和管理:Spring Task 支持任务的监控和管理,可以通过 JMX 或者 Spring Boot Actuator 进行任务的查看和控制。

🌺应用场景

  • 信用卡每月还款提醒

  • 银行贷款每月还款提醒

  • 自动续费短信提醒
    请添加图片描述

  • 火车票售票系统处理未支付订单

  • 入职纪念日为用户发送通知

下面我们来学习cron表达式,通过cron表达式可以定义任务的触发时间

🎄cron表达式

cron其实就是一个字符串,可以用来定义任务触发的时间
(之前讲Linux的文章中有提到cron表达式crond的基本操作)

请添加图片描述

其实我们不用自己手写cron表达式
我们可以通过在线生成器来生成cron表达式https://cron.qqe2.com/

🛸入门案例

请添加图片描述
使用的是黑马程序员的《苍穹外卖》项目的代码来进行学习


在启动类中加上@EnableScheduling

在这里插入图片描述

新建一个task包和MyTask类
在这里插入图片描述

package com.sky.task;import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;import java.util.Date;@Component
@Slf4j
public class MyTask {//定时任务@Scheduled(cron = "0/5 * * * * ?")public void executeTask(){log.info("定时任务执行{}",new Date());}
}

在这里插入图片描述
每隔5秒触发一次

上面我们完成了SpringTask入门案例的编写,下面我们来讲解在《苍穹外卖》中的应用

🎍实际应用

请添加图片描述

我们新创建一个类OrderTask
在这里插入图片描述

package com.sky.task;import com.sky.entity.Orders;
import com.sky.mapper.OrderMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;import java.time.LocalDateTime;
import java.util.List;@Component
@Slf4j
public class OrderTask {@Autowiredprivate OrderMapper orderMapper;//处理超时订单的方法@Scheduled(cron = "0 * * * * ? ")//每分钟触发一次public void processTimeoutOrder(){log.info("定时处理超时订单{}", LocalDateTime.now());//获取当前时间,并在当前时间的基础上减去 15 分钟LocalDateTime time=LocalDateTime.now().plusMinutes(-15);List<Orders> ordersList=orderMapper.getByStatusAndOrderTimeLT(Orders.PENDING_PAYMENT,time);if (ordersList!=null&&ordersList.size()>0){for (Orders orders:ordersList){orders.setStatus(Orders.CANCELLED);orders.setRejectionReason("订单超时,已取消");orders.setCancelTime(LocalDateTime.now());orderMapper.update(orders);}}}//处理一直处于派送中状态的订单@Scheduled(cron = "0 0 1 * * ?")//每天凌晨一点触发一次public void processDeliveryOrder(){log.info("定时处理处于派送中的订单{}",LocalDateTime.now());//获取当前时间,并在当前时间的基础上减去 60 分钟LocalDateTime time=LocalDateTime.now().plusMinutes(-60);List<Orders>ordersList = orderMapper.getByStatusAndOrderTimeLT(Orders.DELIVERY_IN_PROGRESS,time);if (ordersList!=null&&ordersList.size()>0){for (Orders orders:ordersList){orders.setStatus(Orders.CANCELLED);orderMapper.update(orders);}}}
}

在这里插入图片描述

进入OrderMapper接口里面编写sql

根据订单状态和下单时间查询订单
在这里插入图片描述
这样子我们就完成了
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/162786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PTA-快速幂

要求实现一个递归函数&#xff0c;高效求ab(1≤a,b≤62,ab<263)。 函数接口定义&#xff1a; long long int pow(int a, int b); 其中a 、b 是用户传入的参数。 裁判测试程序样例&#xff1a; #include<iostream> using namespace std; long long int pow(int a,…

数据结构 栈与队列

栈 栈是一种 后进先出&#xff08; LIFO&#xff09; 的数据结构&#xff0c;它是一种线性的、有序的数据结构。栈的基本操作有两个&#xff0c;即入栈和出栈。入栈指将元素放入栈顶&#xff0c;出栈指将栈顶元素取出。栈的本质是一个容器&#xff0c;它可以存储任何类型的数…

String转Date,Date转String

源码&#xff1a; Date currentTime new Date();System.out.println("currentTime:"currentTime);SimpleDateFormat formatter new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String dateString formatter.format(currentTime);System.out.println(&quo…

【深度学习】学习率及多种选择策略

学习率是最影响性能的超参数之一&#xff0c;如果我们只能调整一个超参数&#xff0c;那么最好的选择就是它。相比于其它超参数学习率以一种更加复杂的方式控制着模型的有效容量&#xff0c;当学习率最优时&#xff0c;模型的有效容量最大。本文从手动选择学习率到使用预热机制…

qt msvc2010 qdatetime.h:122: error: C2589: “(”:“::”右边的非法标记

报错内容&#xff1a; C:\Qt\Qt5.4.0\5.4.0\msvc2010_opengl\include\QtCore\qdatetime.h:114: error: C2589: “(”:“::”右边的非法标记 C:\Qt\Qt5.4.0\5.4.0\msvc2010_opengl\include\QtCore\qdatetime.h:114: error: C2059: 语法错误:“::” 解决方法&#xff1a; 打开qd…

2023小红书Android面试之旅

一面 自我介绍 看你写了很多文章&#xff0c;拿你理解最深刻的一篇出来讲一讲 讲了Binder相关内容 Binder大概分了几层 哪些方法调用会涉及到Binder通信 大概讲一下startActivity的流程&#xff0c;包括与AMS的交互 全页面停留时长埋点是怎么做的 我在项目中做过的内容&am…

RocketMQ-NameServer详解

前言 ​ RocketMQ架构上主要分为四部分, Broker、Producer、Consumer、NameServer&#xff0c;其他三个都会与NameServer进行通信。 Producer: ​ **消息发布的角色&#xff0c;可集群部署。**通过NameServer集群获得Topic的路由信息&#xff0c;包括Topic下面有哪些Queue&a…

PTA-病毒感染检测

人的DNA和病毒DNA均表示成由一些字母组成的字符串序列。然后检测某种病毒DNA序列是否在患者的DNA序列中出现过&#xff0c;如果出现过&#xff0c;则此人感染了该病毒&#xff0c;否则没有感染。例如&#xff0c;假设病毒的DNA序列为baa&#xff0c;患者1的DNA序列为aaabbba&am…

数据结构与算法编程题15

设计一个算法&#xff0c;通过遍历一趟&#xff0c;将链表中所有结点的链接方向逆转&#xff0c;仍利用原表的存储空间。 #include <iostream> using namespace std;typedef int Elemtype; #define ERROR 0; #define OK 1;typedef struct LNode {Elemtype data; …

【从入门到起飞】JavaSE—多线程(3)(生命周期,线程安全问题,同步方法)

&#x1f38a;专栏【JavaSE】 &#x1f354;喜欢的诗句&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f354;生命周期&#x1f384;线程的安全问题&#…

【Leetcode合集】1410. HTML 实体解析器

1410. HTML 实体解析器 1410. HTML 实体解析器 代码仓库地址&#xff1a; https://github.com/slience-me/Leetcode 个人博客 &#xff1a;https://slienceme.xyz 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""…

YOLOv7独家改进: Inner-IoU基于辅助边框的IoU损失,高效结合 GIoU, DIoU, CIoU,SIoU 等 | 2023.11

💡💡💡本文独家改进:Inner-IoU引入尺度因子 ratio 控制辅助边框的尺度大小用于计算损失,并与现有的基于 IoU ( GIoU, DIoU, CIoU,SIoU )损失进行有效结合 推荐指数:5颗星 新颖指数:5颗星 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.cn/tYI0c …

开发抖音小游戏什么技术

开发抖音小游戏&#xff0c;使用以下技术可能会相对简单&#xff1a; HTML5&#xff1a;HTML5 是一种用于创建网页和应用程序的标准标记语言。它具有丰富的功能和灵活性&#xff0c;可以在各种设备和平台上运行&#xff0c;包括移动设备和浏览器。HTML5 提供了许多游戏开发所需…

大模型AI Agent 前沿调研

前言 大模型技术百花齐放&#xff0c;越来越多&#xff0c;同时大模型的落地也在紧锣密鼓的进行着&#xff0c;其中Agent智能体这个概念可谓是火的一滩糊涂。 今天就分享一些Agent相关的前沿研究&#xff08;仅限基于大模型的AI Agent研究&#xff09;&#xff0c;包括一些论…

完美解决AttributeError: module ‘numpy‘ has no attribute ‘typeDict‘

文章目录 前言一、完美解决办法安装低版本1.21或者1.19.3都可以总结 前言 这个问题从表面看就是和numpy库相关&#xff0c;所以是小问题&#xff0c;经过来回调试安装numpy&#xff0c;发现是因为目前的版本太高&#xff0c;因此我们直接安装低版本numpy。也不用专门卸载目前的…

Qt全球峰会2023中国站 参会概要

Qt全球峰会2023中国站 参会概要 前言峰会议程签到 & Demo 演示开场致辞Qt Group 产品总监演讲&#xff08;产品开发的趋势-开放的软件、工具和框架&#xff09;产品战略QtQuick or QtWidgets&#xff08;c or qml&#xff09;Qt如何定义AI个人看法 Qt 在券商数字化转型和信…

【MySQL】内连接和外连接

内连接和外连接 前言正式开始内连接外连接左外连接右外连接 前言 前一篇讲多表查询的时候讲过笛卡尔积&#xff0c;其实笛卡尔积就算一种连接&#xff0c;不过前一篇讲的时候并没有细说连接相关的内容&#xff0c;本篇就来详细说说表的连接有哪些。 本篇博客中主要用到的还是…

快速去除Word文档密码,全面解决你的困扰

如果你忘记了Word文档密码&#xff0c;或者想解密和去除Word文档密码&#xff0c;下面是简单步骤&#xff1a;第一步&#xff0c;百度搜索【密码帝官网】找到官方网站&#xff1b;第二步&#xff0c;点击“立即开始”&#xff0c;进入用户中心&#xff0c;上传需要解密的文件。…

中部A股第一城,长沙如何赢商?

文|智能相对论 作者|范柔丝 长沙的马路&#xff0c;都很有故事。 一条解放西路&#xff0c;是全国人民都争相打卡的娱乐地标&#xff1b;一条太平街&#xff0c;既承载了历史的厚重又演绎着现代的鲜活...... 但如果来到河西的桐梓坡路&#xff0c;风景会变得截然不同。 沿…

应用软件安全编程--28SSL 连接时要进行服务器身份验证

当进行SSL 连接时&#xff0c;服务器身份验证处于禁用状态。在某些使用SSL 连接的库中&#xff0c;默认情况下不 验证服务器证书。这相当于信任所有证书。 对 SSL 连接时要进行服务器身份验证的情况&#xff0c;示例1给出了不规范用法(Java 语言)示例。示例2 给出了规范用法(J…