SpringBoot整合定时任务

一、 Scheduled原理

JUC 包中的 Executor 架构带来了线程的创建与执行的分离。Executor 的继承者ExecutorService 下面衍生出了两个重要的实现类,他们分别是

1、ThreadPoolExecutor 线程池

2、ScheduledThreadPoolExecutor 支持周期性任务的线程池

通过 ThreadPoolExecutor 可以实现各式各样的自定义线程池,而 ScheduledThreadPoolExecutor 类则在自定义线程池的基础上增加了周期性执行任务的功能

二、导入依赖

springboot3之后自带定时任务器,所以只需要引用springboot启动器就可以

java 复制代码
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.0.5</version>
</parent>

三、编写定时任务

定时任务所在的类需要是spring的组件,所以在定时任务类上需要加上@Component注解,并且在定时任务方法上加上@Scheduled注解,声明这是一个定时任务。(这里需要注意的是@Scheduled注解里面的cron表达式,后面会详细介绍)

java 复制代码
@Component
public class MySchduled {
    private int count = 0;

    @Scheduled(cron = "0/3 * * * * ? ")
    public void print(){
        System.out.println("hello:" + count++);
    }
}

四、Cron表达式

Cron表达式是一种用于指定定时任务执行时间的字符串,它由六个或七个字段组成,分别表示秒分时日期月份星期年份(可选)。每个字段可以是一个具体的值、一个范围、一个递增步长,或者使用特殊字符。12

  • 星号(*):在某个字段中使用时,表示该字段可以取该字段的所有可能值。例如,在分钟字段中使用 * 表示每分钟。
  • 问号(?):只在日期和星期字段中使用,通常作为无意义的值,相当于占位符。
  • 减号(-):表示一个范围,例如在小时字段中使用"10-12"表示从10点到12点,即10、11、12点。
  • 逗号(,):表示一个列表值,例如在星期字段中使用"MON,WED,FRI"表示星期一、星期三和星期五。
  • 斜杠(/):表示一个等步长序列,例如在分钟字段中使用0/15表示从0秒开始,每隔15秒触发一次。
  • L:只在日期和星期字段中使用,代表"Last"的意思,在日期字段中表示这个月份的最后一天,在星期字段中表示星期六。
  • W:只能出现在日期字段里,是对前导日期的修饰,表示离该日期最近的工作日。

例如,上面我们使用的(0/3 * * * * ?)的意思就是每隔3秒执行一次

网上有很多cron表达式在线生成器,可以在线生成,使用起来也比较方便

五、启动

启动定时任务扫描是非常重要的一步,没启动的话定时任务不会执行,启动定时任务需要在启动类或者配置类上添加@EnableScheduling注解,表示启动定时任务扫描

java 复制代码
@SpringBootApplication
@MapperScan("com.zxc.mapper")
@EnableScheduling
@EnableAspectJAutoProxy
public class AuthApplication {
    public static void main(String[] args) {
        SpringApplication.run(AuthApplication.class,args);
    }
}
相关推荐
IT学长编程3 分钟前
计算机毕设选题 基于SpringBoot的书店管理系统的设计与实现 网上书店系统 前后端分离 Java毕设项目 毕业设计选题 【附源码+文档报告+安装调试】
java·spring boot·毕业设计·课程设计·前后端分离·网上书店系统·书店管理系统
张较瘦_5 分钟前
应用型本科计算机类专业毕业设计与论文选题指南
java·开发语言·课程设计
IT学长编程6 分钟前
计算机毕设选题 基于SpringBoot的房产租赁管理系统 房屋租赁系统 前后端分离 Java毕设项目 毕业设计选题 【附源码+文档报告+安装调试】
java·spring boot·毕业设计·课程设计·房屋租赁系统·房产租赁系统·文档报告
李慕婉学姐1 小时前
【开题答辩过程】以《基于 Spring Boot 的宠物应急救援系统设计与实现》为例,不会开题答辩的可以进来看看
数据库·spring boot·宠物
一只大头猿2 小时前
基于SpringBoot和Vue的超市管理系统
前端·vue.js·spring boot
木易 士心2 小时前
MPAndroidChart 用法解析和性能优化 - Kotlin & Java 双版本
android·java·kotlin
后端小张2 小时前
SpringBoot 控制台秒变炫彩特效,秀翻同事指南!
java·后端
好家伙VCC2 小时前
**标题:发散创新:探索AR开发框架的核心技术**随着增强现实(AR)技术的飞速发展,AR开发框架成为了开发者们关注的焦
java·ar
chools2 小时前
学习问题日记-4
java
懒人Ethan3 小时前
解决一个C# 在Framework 4.5反序列化的问题
java·前端·c#