https://blog.csdn.net/qq_35387940/article/details/104749059
什么时候要用到定时任务
1) 要求在一个特定的时间给用户发送一个信息
2) 或者是规定的时间对redis缓存的数据进行一个清除
解决方案二:
1) Scheduled(死该久)定时任务器 ——>简单
2) 整合Quartz(Q只)定时任务框架 ——>复杂
一、 scheduled

0/2是从0开始每隔两秒的意思
2 的话就是每分钟的第2秒触发
下面是允许值,只能在允许值范围内否则会报错

以下一个星号的月份是闰月,表示只有在有31号的月份的下午6点50分3秒执行定时器

然后如果你填了个2的话就会报错

星期的话是从周日表示1然后4的话其实是星期3,这表示2月份的每周3下午6点50分3秒触发定时器,加个?表示占位舍弃这个判定。因为如果2月的周3不在这个日的话也会报错



二、 Quartz的介绍和Quartz的使用思路
2.1、Quartz的介绍

2.2 使用思路
1)job – 任务 – 你要做什么事?
2)Trigger – 触发器 – 你什么时候去做?
3)scheduled – 任务调度 – 你什么时候需要去做什么事?
2.3 普通项目使用quartz

添加pom依赖

1)创建job类

Trigger
方法
Repeathourlyforever()每小时执行一次
Repeathourlyforever(int hours)每hours时执行一次
RepeatHourlyfortotalcount(int count)每小时执行一次,一共count次
RepeatHourlyfortotalcount(int count,int hours)每hours时执行一次,一共执行count次
RepeatSecondlyforever()每秒执行一次
2)创建测试类



3)执行:

1)用cron表达式来做
改trigger这里就行,每两秒执行以下

三、 springboot整合quartz定时框架
3.1)修改pom文件添加依赖
<!-- Quartz坐标-->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
<exclusions>
<exclusion>
<artifactId>s1f4j-apik</artifactId>
<groupId>org. slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!--添加Scheduled坐标-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<!-- Sprng tx坐标-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
Spring tx做事务的依赖
3.2)编写任务类

3.3)编写配置类


简单的trigge


启动


给的是重复5次所以一共是6次每个两秒
用cron Trigger

修改scheduler


四、 任务类(job)中如何完成一些其他类的注入


然后我们运行之后报了一个空指针异常

报空指针表示userservice没有注入进来
原因:创建对象是使用反射创建的,被注入的对象任务类没有注入spring所以注入失败
注入:要求注入对象和被注入对象都在spring的ioc容器中


解决方法:


然后在scheduler方法上加一个参数,再注入工厂



本文探讨了在特定时间发送信息或定期清理缓存等场景下定时任务的应用,对比Scheduled与Quartz两种解决方案。深入介绍了Quartz框架的原理,包括Job、Trigger与Scheduler的概念,并演示了如何在Spring Boot项目中整合Quartz实现定时任务。

2771

被折叠的 条评论
为什么被折叠?



