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

devtools/2024/9/23 9:29:33/

目录

定时任务

项目总结

新建一个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.ppmy.cn/devtools/43873.html

相关文章

Compose 中的 touch 事件

在 Android 原生开发中对 View 的 touch 事件处理有这么几种方式&#xff1a; setOnClickListener&#xff1a;监听点击事件setOnTouchListener&#xff1a;监听 touch 事件自定义View&#xff1a;覆写 dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent 等方法 方式…

强化学习算法中on-policy和off-policy

强化学习算法中on-policy和off-policy On-PolicyOff-Policy对比总结示例&#xff1a;SARSA vs Q-LearningSARSA实现Q-Learning实现 结论 在强化学习中&#xff0c;策略&#xff08;policy&#xff09;是智能体选择动作的规则。根据策略更新的方式&#xff0c;强化学习算法可以分…

【PostgreSQL】 JSON数组 提取根据索引提取对象和字段

在 PostgreSQL 中处理 JSON 数组&#xff1a;按索引提取对象和字段 在现代应用程序中&#xff0c;JSON 数据格式因其灵活性和可读性广泛应用。PostgreSQL 作为一个强大的关系型数据库管理系统&#xff0c;提供了强大的 JSON 数据类型和函数支持&#xff0c;使得在数据库中存储…

基于Keras的手写数字识别(附源码)

目录 引言 为什么要创建虚拟环境&#xff0c;好处在哪里&#xff1f; 源码 我修改的部分 调用本地数据 修改第二层卷积层 引言 本文是博主为了记录一个好的开源代码而写&#xff0c;下面是代码出处&#xff01;强烈建议收藏&#xff01;【深度学习实战—1】&#xff1a…

Python | Leetcode Python题解之第116题填充每个节点的下一个右侧节点指针

题目&#xff1a; 题解&#xff1a; class Solution:def connect(self, root: Node) -> Node:if not root:return root# 从根节点开始leftmost rootwhile leftmost.left:# 遍历这一层节点组织成的链表&#xff0c;为下一层的节点更新 next 指针head leftmostwhile head:#…

【QT】包含中文的QString转换为std::string乱码问题

问题描述 在开发过程中需要用到QStringList file_names QFileDialog::getOpenFileNames()读取文件&#xff0c;并通过QString::toStdString()方法转换为std::string类型进行后续的使用&#xff0c;但是我发现当文件名包含中文的时候&#xff0c;QString没问题&#xff0c;但是…

请叙述Vue 中使用了哪些设计模式

在Vue中&#xff0c;使用了多种设计模式来构建其框架和组件系统&#xff0c;这些设计模式使得Vue具有高效、灵活和易于维护的特性。以下是Vue中常见的设计模式及其简要描述&#xff1a; MVVM&#xff08;Model-View-ViewModel&#xff09;模式&#xff1a; Vue.js是一个MVVM框架…

TCP—三次握手和四次挥手

目录 一、三次握手和四次挥手的目的 二、TCP可靠的方面 三、什么是三次握手 四、第三次握手的目的 五、什么是四次挥手 六、超时时间的目的 七、SYN包、ACK包、FIN包 八、解决丢包和乱序 九、参考资料 一、三次握手和四次挥手的目的 TCP三次握手的目的主要是为了确保两…