SpringBoot——整合定时任务

简介: SpringBoot——整合定时任务

文章目录

一、定时任务使用场景

二、定时任务的几种实现方式

三、SpringBoot中定时任务使用

1、引入依赖

2、开启定时任务

3、创建定时任务类

测试结果:

四、@Scheduled注解参数说明

1、参数说明:

2、fixedRate 说明:

五、常用cron表达式


一、定时任务使用场景


客户生日发邮件,定时统计报表等。


二、定时任务的几种实现方式


在JAVA开发领域,目前可以通过以下几种方式进行定时任务:

1、Timer:jdk中自带的一个定时调度类,可以简单的实现按某一频度进行任务执行。提供的功能比较单一,无法实现复杂的调度任务。


2、ScheduledExecutorService:也是jdk自带的一个基于线程池设计的定时任务类。其每个调度任务都会分配到线程池中的一个线程执行,所以其任务是并发执行的,互不影响。


3、Spring Task:Spring提供的一个任务调度工具,支持注解和配置文件形式,支持Cron表达式,使用简单且功能强大。


4、Quartz:一款功能强大的任务调度器,可以实现较为复杂的调度功能,如每月一号执行、每天凌晨执行、每周五执行等等,还支持分布式调度,就是配置稍显复杂。


三、SpringBoot中定时任务使用


1、引入依赖


只需要引入spring-boot-starter依赖就可以。

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
  </dependency>
</dependencies>

2、开启定时任务


在启动类上面加上@EnableScheduling注解即可开启定时任务。

@SpringBootApplication
@EnableScheduling
public class TaskApplication {
    public static void main(String[] args) {
        SpringApplication.run(TaskApplication.class);
    }
}

3、创建定时任务类


创建一个定时任务类,在方法上加上@Scheduled注解,注解的参数可以配置时间。注意不要忘记加上@Component。

@Component
public class MyTask {
    @Scheduled(fixedRate = 5000)
    public void testTaskFirst() {
        System.out.println("定时任务一:每五秒执行一次,当前时间:"+ LocalTime.now());
    }
    @Scheduled(cron = "0 28 03 ? * *")
    public void testTaskSecond() {
        System.out.println("定时任务二:指定每天3:26执行,当前时间:"+LocalTime.now());
    }
}

测试结果:


1.png


四、@Scheduled注解参数说明


1、参数说明:


@Scheduled 参数可以接受两种定时的设置,一种是我们常用的cron="*/5 * * * * ?",一种是 fixedRate = 5000,两种都表示每隔五秒打印一下内容。


2、fixedRate 说明:


@Scheduled(fixedRate = 5000) :上一次开始执行时间点之后5秒再执行。

@Scheduled(fixedDelay = 5000) :上一次执行完毕时间点之后5秒再执行。

@Scheduled(initialDelay=1000, fixedRate=5000) :第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次。


五、常用cron表达式


0 0 10,14,16 * * ? 每天上午10点,下午2点,4点 
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时 
0 0 12 ? * WED 表示每个星期三中午12点 
"0 0 12 * * ?" 每天中午12点触发 
"0 15 10 ? * *" 每天上午10:15触发 
"0 15 10 * * ?" 每天上午10:15触发 
"0 15 10 * * ? *" 每天上午10:15触发 
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发 
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发 
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发 
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发 
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发 
"0 15 10 15 * ?" 每月15日上午10:15触发 
"0 15 10 L * ?" 每月最后一日的上午10:15触发 
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
每隔5秒执行一次:*/5 * * * * ?
每隔1分钟执行一次:0 */1 * * * ?
每天23点执行一次:0 0 23 * * ?
每天凌晨1点执行一次:0 0 1 * * ?
每月1号凌晨1点执行一次:0 0 1 1 * ?
每月最后一天23点执行一次:0 0 23 L * ?
每周星期天凌晨1点实行一次:0 0 1 ? * L
在26分、29分、33分执行一次:0 26,29,33 * * * ?
每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?

crontab 工具

https://tool.lu/crontab/

http://qqe2.com/cron

百度各种使用方法spring crontab

相关文章
|
机器学习/深度学习 数据采集 SQL
一文读懂大数据实时计算(一)
本文分为四个章节介绍实时计算,第一节介绍实时计算出现的原因及概念;第二节介绍实时计算的应用场景;第三节介绍实时计算常见的架构;第四节是实时数仓解决方案。
3011 0
一文读懂大数据实时计算(一)
|
存储 安全 算法
使用jotp实现双因子验证
扫盲使用totp增强身份安全性指南,原理看懂也不用自己造轮子呀,最讨厌哪些啥也不懂的搬运工,我这里给大家解惑吧
882 0
|
前端开发 easyexcel Java
Java+EasyExcel实现文件导入导出,导入导出如此简单
项目中需要Excel文件的导入与导出Excel并下载,例如,导入员工信息,导出员工信息,手动输入比较繁琐,所以本篇博文教大家如何在Java中导入Excel文件与导出Excel文件
15064 3
Java+EasyExcel实现文件导入导出,导入导出如此简单
|
11月前
|
Shell Linux Windows
让我们熟悉一下 shell 正则表达式使用
正则表达式是一种文本处理工具,用于匹配、查找、替换或提取字符串中的特定模式。通过普通字符和特殊字符(元字符)组成,定义匹配规则。本文档通过示例展示了如何使用正则表达式进行字符串搜索、过滤和模式匹配,包括基本匹配、行首行尾定位、字符集使用、任意字符与重复字符处理以及限定重复次数等高级功能。
143 7
|
监控 Windows
Windows服务器的服务如何实现自动启动?
Windows服务器的服务如何实现自动启动?
1917 1
|
网络协议 安全 物联网
探索未来网络:IPv6的演进与应用
本文深入探讨了互联网协议第六版(IPv6)的发展历程、技术特点以及在现代网络中的应用。通过分析IPv4的局限性和IPv6的优势,阐述了IPv6对网络扩展性、安全性和性能提升的重要性。同时,文章还探讨了IPv6在实际部署中面临的挑战和解决方案,为读者提供了全面而深入的理解。
|
存储 SQL 分布式计算
MaxCompute的优势
【7月更文挑战第1天】MaxCompute的优势
227 0
|
Python
接上python如何处理下载中断的情况
实现断点续传机制涉及记录已下载的字节数、使用`Range`头继续下载及合并文件块。Python示例代码展示了如何通过`requests`库从上次中断的位置开始下载,将新内容追加到现有文件。函数`resume_download(url, filename, last_byte=0)`接收URL、文件名和最后字节位置作为参数。注意,实际使用时需确保URL和文件路径有效。
400 0
|
存储 Kubernetes 调度
在k8S中,Pod如何实现数据持久化?数据共享?跨节点Pod如何实现数据共享?
在k8S中,Pod如何实现数据持久化?数据共享?跨节点Pod如何实现数据共享?
Java中的正则表达式详解
Java中的正则表达式详解