SpringBoot
【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】
SpringBoot 开发实用篇
文章目录
- SpringBoot
- SpringBoot 开发实用篇
- 5 整合第三方技术
- 5.14 SpringBoot 整合 quartz
- 5.14.1 任务【定时任务】
- 5.14.2 环境准备
- 5.14.3 Java 中的定时任务
- 5.14.4 SpringBoot 整合 Quartz
- 5.14.5 小结
5 整合第三方技术
5.14 SpringBoot 整合 quartz
5.14.1 任务【定时任务】
【定时任务】
- 定时任务是企业级应用中的常见操作
- 年度报表
- 缓存统计报告
- …
市面上流行的定时任务技术:【当时】
- Quartz
- Spring Task
5.14.2 环境准备
创建一个新的模块工程
依赖都不勾,自己加
直接创建,上来先把SpringBoot 的版本改掉
OK,一个全新的 SpringBoot 工程
5.14.3 Java 中的定时任务
新建一个类
package com.dingjiaxiong;
import java.util.Timer;
import java.util.TimerTask;
/**
* ClassName: TimerTaskApp
* date: 2022/10/22 13:19
*
* @author DingJiaxiong
*/
public class TimerTaskApp {
public static void main(String[] args) {
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.println("Timer task run...");
}
};
timer.schedule(task,0,2000); //当前程序启动后立即执行,每2s执行一次
}
}
直接运行
效果很明显
【这就是Java 内部的实现方式】【但是毕竟还是不专业】
这就催致了 Quartz 和 Spring Task的出现
5.14.4 SpringBoot 整合 Quartz
【相关概念】
- 工作(Job):用于定义具体执行的工作【要干的事儿】
- 工作明细(JobDetail):用于描述定时工作相关的信息【事儿的明细】
- 触发器(Trigger):用于描述触发工作的规则,通常使用cron表达式定义调度规则
- 调度器(Scheduler):描述了工作明细与触发器的对应关系【绑定】
【导入坐标】
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
【创建工作】
package com.dingjiaxiong.quartz;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
/**
* ClassName: MyQuartz
* date: 2022/10/22 13:42
*
* @author DingJiaxiong
*/
public class MyQuartz extends QuartzJobBean {
//实现抽象方法
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
//编写具体要干的事儿
System.out.println("Quartz task run...");
}
}
这就是一个普通的Java 对象
【进行配置】
创建配置类
package com.dingjiaxiong.config;
import com.dingjiaxiong.quartz.MyQuartz;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* ClassName: QuartzConfig
* date: 2022/10/22 13:46
*
* @author DingJiaxiong
*/
@Configuration
public class QuartzConfig {
//打印工作的明细
@Bean
public JobDetail printJobDetail(){
//绑定具体的工作
return JobBuilder.newJob(MyQuartz.class).storeDurably().build();
}
//触发器
@Bean
public Trigger printJobTrigger(){
//绑定对应的工作明细
ScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ?"); //从0秒开始,每5s执行一次
return TriggerBuilder.newTrigger().forJob(printJobDetail()).withSchedule(scheduleBuilder).build();
}
}
这样就OK了,当我们启动服务器,加载到这个配置类,定时任务就开始了
直接运行!
OK, 每隔5s 打印一次,为了效果明显,笔者改下,每秒钟打印一次
OK, 这样就很明显了
【简单的整合就是这样】
回顾一下
- 导入SpringBoot整合quartz的坐标
- 定义具体要执行的任务,继承QuartzJobBean
- 定义工作明细与触发器,并绑定对应关系
5.14.5 小结
- SpringBoot整合Quartz
- 工作(Job)
- 工作明细(JobDetail)
- 触发器(Trigger)
- 调度器(Scheduler
【可以感觉到还是很麻烦啊,能不能简化?】