一、Quartz概述:基于Java开发开源的作业调度框架,也就是批处理框架。有数据库支持,集群,插件,EJB 作业预构建,JavaMail ,支持 cron-like 表达式等。
1.常用API:
(1)Job接口:任务接口,留给开发者去实现的接口,当执行任务时,执行的是该接口的execute方法。
(2)Trigger接口:触发器,规定任务执行的时间点和执行的频率。
(3)Scheduler :任务调度器,负责执行任务。
2.Trigger的实现类:通过JobBuilder获取。 (1)SimpleTrigger类:普通触发器器类
(2)CronTrigger类:这个触发器可以通过Cron表达式指定 [秒] [分] [小时] [日] [月] [周] [年]比较常用的类
Cron表达式的取值范围
位置 | 时间域名 | 允许值 | 允许的特殊字符 |
1 | 秒 | 0-59 | , - * / |
2 | 分钟 | 0-59 | , - * / |
3 | 小时 | 0-23 | , - * / |
4 | 日期 | 1-31 | , - * ? / L W C |
5 | 月份 | 1-12 | , - * / |
6 | 星期 | 1-7 | , - * ? / L C # |
7 | 年(可选) | 空值1970-2099 | , - * / |
特殊字符含义:
Cron表达式生成地址:在线Cron表达式生成器-奇Q工具网
3. Scheduler 的实现类:RemoteScheduler、StdScheduler可以通过 SchdulerFactory接口获取。 工厂的两个实现类:StdSchedulerFactory、DirectSchedulerFactory。
常用api参考:SpringBoot 之 Quartz 使用 - 程序员小明1024 - 博客园
任务定时调度——quartz_scheduler必须调sart才可以运行吗-优快云博客
理论参考:https://www.w3cschool.cn/quartz_doc/quartz_doc-ib1j2d6x.html
整合springbootSpringBoot整合Quartz实现定时任务动态自定义和可视化_在原有的springboot项目中集成可视化定时任务分析管理-优快云博客
二、代码实现步骤
1.导入依赖
<!-- quartz调度框架-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
2.定义一个任务类,实现job接口,重写execute()方法,方法就是需要做的事。
public class Myjob implements Job{
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("任务被执行...."+sdf.format(new Date()));
}
}
3.写一个方法启动调度,一般放在监听器中,后期通过向调度器中加job任务即可。
@Component
public class myListener implements ApplicationListener {
@EventListener
@SneakyThrows
@Override
public void onApplicationEvent(ApplicationEvent event) {
//1.创建自定义的任务(job)对象
JobDetail job = JobBuilder.newJob(Myjob.class).build();
//2.创建触发器(Trigger)对象,并设置触发规则,每格五秒触发一次Job
Trigger trigger = TriggerBuilder.newTrigger().withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(5)).build();
//3.创建任务调度(Scheduler)对象
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
//4.将任务和触发器绑定
scheduler.scheduleJob(job, trigger);
//5.启动任务
scheduler.start();
}
}