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方法上加一个参数,再注入工厂