SpringBoot——基于Spring Task实现定时任务

目录

定时任务

项目总结

新建一个SpringBoot项目

pom.xml无需引入依赖

SpringTaskDemo

SpringbootSpringtaskApplication启动类


定时任务

  • 在日常的项目开发中,往往会涉及一些需要做到定时执行的代码,例如自动将超过24小时的未付款的订单改为取消状态,自动将超过14天客户未签收的订单改为已签收状态等。
  • 实现定时任务的方式有很多,但最常用的是基于Spring Task实现定时任务的
  • 参考文章:http://t.csdnimg.cn/WVoGU
  • Spring Task 是 Spring 框架提供的一种用于处理定时任务的机制,Spring Task的核心实现类位于spring-context包中,在Spring项目中可以直接使用该定时任务类,Spring Task还提供了 @Scheduled 注解来支持定时任务的创建和调度

@Scheduled注解支持的部分配置参数:

  • cron:cron表达式,指定任务在特定时间执行
  • fixedDelay:表示 上一次任务执行完成后多久再次执行,参数类型:long,单位:ms
  • fixedDelayString:和fixedDelay含义一样,只是参数类型变成String
  • fixedRate:表示按一定的频率执行任务,参数类型:long,单位:ms
  • fixedRateString:与fixedRate的含义一样,只是参数类型变成String
  • initialDelay:表示延迟多久再第一次执行任务,参数类型:long,单位:ms
  • initialDelayString:与initialDelay含义一样,只是参数类型变成String
  • zone :时区,默认为当前时区,一般不用

在线生成cron表达式的网站:

  • 1、quartz/Cron/Crontab表达式在线生成工具-BeJSON.com
  • 2、在线Cron表达式生成器 - 码工具 (matools.com)

项目总结

  1. 首先,在 Spring Boot 主类中添加 @EnableScheduling 注解以启用定时任务
  2. 然后,创建一个包含定时任务方法的类,并使用 @Scheduled 注解指定定时任务的触发规则

新建一个SpringBoot项目

项目结构:

 

pom.xml无需引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.study</groupId><artifactId>springboot_springtask</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot_springtask</name><description>Demo project for Spring Boot</description><properties><java.version>8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

SpringTaskDemo

package com.study.springboot_springtask.dingshi;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component
public class SpringTaskDemo {//打印日志private Logger logger=LoggerFactory.getLogger(SpringTaskDemo.class);private int fixedDelayCount=1;private int fixedRateCount=1;private int initialDelayCount=1;private int cronCount=1;@Scheduled(fixedDelay = 5000)//表示当前方法执行完毕5000ms后,Spring scheduling会再次调用该方法public void testFixDelay(){logger.info("=========fixedDelay: 第{}次执行方法",fixedDelayCount++);}@Scheduled(fixedRate = 5000)//表示当前方法开始执行5000ms后,Spring scheduling会再次调用该方法public void testFixedRate(){logger.info("=========fixedRate: 第{}次执行方法",fixedRateCount++);}@Scheduled(initialDelay = 1000,fixedRate = 5000)//表示延迟1000ms执行第一次任务public void testInitialDelay(){logger.info("=========initialDelay: 第{}次执行方法",initialDelayCount++);}@Scheduled(cron = "0 15 10 * * ?")//cron接受cron表达式,根据cron表达式确定定时规则,表示:每天10:15定时触发执行public void testCron(){logger.info("=========cron: 第{}次执行方法",cronCount++);}
}

SpringbootSpringtaskApplication启动类

package com.study.springboot_springtask;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;@SpringBootApplication
@EnableScheduling // 开启基于注解的定时任务,发现注解@Scheduled的任务并由后台执行
public class SpringbootSpringtaskApplication {public static void main(String[] args) {SpringApplication.run(SpringbootSpringtaskApplication.class, args);}}

 启动项目:

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

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

相关文章

【调试笔记-20240522-Windows-WSL 修改已安装发行版名称】

调试笔记-系列文章目录 调试笔记-20240522-Windows-WSL 修改已安装发行版名称 文章目录 调试笔记-系列文章目录调试笔记-20240522-Windows-WSL 修改已安装发行版名称 前言一、调试环境操作系统&#xff1a;Windows 10 专业版调试环境调试目标 二、调试步骤方法一&#xff1a;修…

数字化校园的特征

"数字化校园"是校园信息化进入高级阶段的表现形式&#xff0c;信息技术与教育教育的交融应该更深化。因而&#xff0c;数字化校园应该具以下特征&#xff1a; 1.互联网络高速发展 网络是信息时代的根基&#xff0c;没有网络就无法完成教育信息化的绝大部分作业。数字…

Go Redis 实现邮件群发

一、安装 go get github.com/go-redis/redis/v8二、邮箱服务配置,以QQ邮箱为例 三、示例代码 package mainimport ("context""fmt"redis "github.com/go-redis/redis/v8""gopkg.in/gomail.v2""gopkg.in/ini.v1"&quo…

总结 HTTP 协议的基本格式

一、HTTP 是什么 HTTP ( 全称为 " 超文本传输协议 ") 是一种应用非常广泛的 应用层协议 . HTTP 诞生与 1991 年 . 目前已经发展为最主流使用的一种应用层协议 . HTTP 协议目前有三个大版本: HTTP / 1 和 HTTP / 2 都是基于TCP 传输控制协议传输数据。最新版本的…

Java基础语法---Stringjoiner

Stringjoiner 使用需要加入 import java.util.StringJoiner 构造方法: StringJoiner(CharSequence delimiter) 创建一个 StringJoiner 实例&#xff0c;使用指定的分隔符&#xff0c;前缀和后缀默认为空字符串。 StringJoiner(CharSequence delimiter, CharSequence prefix, C…

60. UE5 RPG 使用场景查询系统(EQS,Environment Query System)实现远程敌人寻找攻击位置

UE的Environment Query System&#xff08;EQS&#xff09;是环境查询系统&#xff0c;它是UE4和UE5中用于AI决策制定过程中的数据采集和处理的一个强大工具。EQS可以收集场景中相关的数据&#xff0c;利用生成器&#xff08;Generator&#xff09;针对用户的测试&#xff08;T…

跳台阶扩展问题

题目链接 f(1) 1f(2) 1 1 2f(3) 1 2 1 4f(4) 1 2 4 1 8 所以 f(n) 2 n − 1 ^{n-1} n−1 import java.util.Scanner;public class Solution {public int jumpFloorII(int target) {return 1 << (target - 1);} }

基于SpringBoot的旅游管理系统

基于SpringBoot的旅游管理系统 旅游管理系统开发技术功能模块代码结构数据库设计运行截图源码获取 旅游管理系统 开发技术 技术&#xff1a;SpringBoot、MyBatis-Plus、MySQL、Beetl、Layui。 框架&#xff1a;基于开源框架Snowy-Layui开发。 工具&#xff1a;IDEA、Navicat等…

ESP32 - Micropython ESP-IDF 双线教程 WIFI (1)

ESP32 - Micropython ESP-IDF 双线教程 WIFI ESP32-WIFI介绍1. 工作模式2. 主要功能3. 编程接口总结 ESP32 - Micropython WIFIESP32-MicroPython Wi-Fi 功能示例代码代码解释注意事项 ESP32中的Wi-Fi功能是其核心特性之一&#xff0c;它基于IEEE 802.11标准&#xff0c;提供了…

Python 读取.shp文件并生成图幅编号

代码适用于需要处理和分析地理空间数据的场景&#xff0c;如城市规划、环境监测或自然资源管理&#xff0c;其中它可以帮助用户读取特定区域的Shapefile文件&#xff0c;确定其地理边界&#xff0c;并基于这些边界计算出按照经纬度5度间隔的图幅编号&#xff0c;进而用于地图制…

django中,无法跳转到请求的html页面?

出现错误&#xff1a; You’re seeing this error because you have DEBUG True in your Django settings file. Change that to False, and Django will display a standard 404 page. 在urls中&#xff0c;注释了系统的默认配置&#xff0c;这时就需要在setting配置文件中&…

HTML <from>表单

定义&#xff1a;<form>元素定义了一个表单&#xff0c;用户可以在表单中输入数据&#xff0c;这些数据可以被提交到服务器。 属性&#xff1a; action&#xff1a;指定表单提交时的目标URL&#xff08;服务器端脚本的地址&#xff09;。 method&#xff1a;定义提交表…

AI爆文写作:使用AI来帮你拆分吧,过程丝滑,效率翻倍:拆选题、拆标题、拆结构、拆逻辑、拆段落、收集素材吧!

文章目录 一、为什么要拆文?二、拆分拆什么?三、怎么拆?**1、拆选题和标题:理解作者意图****2、拆结构:学会谋篇布局****3、拆逻辑:洞察思路观点****4、拆段落:掌握起承转合****5、收集语料,丰富素材库**四、拆分提示词一、为什么要拆文? 新进入某个领域,模仿“过来…

使用Node.js搭建服务器

使用Node.js搭建服务器 1.安装Node.js和npm 安装教程自行搜索&#xff08;好多&#xff09;&#xff0c;建议Node.js直接安装在C盘 注意镜像的设置&#xff1a;npm install -g cnpm --registryhttps://registry.npm.taobao.org 注意版本检查&#xff1a; //以下是我使用的版…

Android Studio 版本升级后 Gradle project sync failed(Android V 应用升级)

问题及解决方案 更新到蜥蜴 Android Studio Iguana 后&#xff0c;出现Gradle project sync failed的问题&#xff08;IDE更新版本的常态了&#xff09;。 背景&#xff1a;对应用进行Android V版本升级&#xff08;SDK35&#xff0c;gradle插件版本要 8.4.0&#xff09; 1、…

Java实现对PDF、纵向、横向页面添加自定义水印功能

Java实现对PDF、纵向、横向页面添加自定义水印 效果图 -- 纵向 页面PDF使用到JAR Maven依赖版本效果图 -- 横向页面PDF 效果图 – 纵向 页面PDF 代码如下&#xff1a; 使用到JAR Maven依赖版本 <dependency><groupId>org.apache.pdfbox</groupId><artifa…

redis 主从复制薪火相传 哨兵sentinel配置以及底层原理

薪火相传 我们知道redis的主从复制还有一个常见的架构 ---薪火相传 使用这种结构可以有效减轻master节点的复制数据同步压力 注意这里的6380节点仍然是slave节点 可以理解为一个中间节点,仍然是不可以写只可以读取的 我们只需要使用 slaveof ip port 这里可能访问节点的时候出…

yolov系列

学习一个深度学习网络&#xff0c;就看三点&#xff0c;1. 网络架构 2.输入输出 3.损失函数 yolov1 2015年诞生的YOLOv1创造性地使用端到端结构完成了物体检测任务&#xff0c;把检测问题转换成了回归问题&#xff0c;直接预测物体的类别和位置。 每个grid有30维&#xff0c;…

代码随想录算法训练营Day54 | 392.判断子序列 115.不同的子序列

代码随想录算法训练营Day54 | 392.判断子序列 115.不同的子序列 LeetCode 392.判断子序列 题目链接&#xff1a;LeetCode 392.判断子序列 思路&#xff1a; 和最长子序列等价 class Solution { public:bool isSubsequence(string s, string t) {int m s.size();int n t.s…

【Python设计模式09】模板方法模式

模板方法模式&#xff08;Template Method Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一个操作中的算法骨架&#xff0c;而将一些步骤的实现延迟到子类。模板方法模式允许子类在不改变算法结构的情况下重新定义算法的某些步骤。 模板方法模式的结构 模板方…