Quartz是当今市面上流行的高效的任务调度管理工具
Quartz的核心组件:
调度器:Scheduler
任务:job
触发器:Trigger
- job(工作\任务):Quartz 实现过程中是一个接口,接口中有一个方法execute(执行的意思)
我们创建一个类,实现这个接口,在方法中编写要进行的操作(执行具体任务)
我们还需要一个JobDetail的类型的对象,Quartz每次执行job时
会实例化job类型对象,去调用这个方法,JobDetail是用来描述Job实现类的静态信息,
比如任务运行时在Quartz中的名称
-
Trigger(触发器):能够描述触发指定job的规则,分为简单触发和复杂触发
简单触发可以使用SimplTrigger实现类.功能类似timer
复杂触发可以使用CronTrigger实现类,内部利用cron表达式描述各种复杂的时间调度计划
-
Scheduler(调度器):一个可以规定哪个触发器绑定哪个job的容器
在调度器中保存全部的Quartz 保存的任务
SpringBoot框架下,添加Quartz依赖后,调度器由SpringBoot管理,我们不需要编写
在SpringBoot框架下使用Quartz格式
1.
<!-- SpringBoot 整合 Quartz依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
2.创建一个QuartzJob的类,实现Job接口
@Slf4j public class QuartzJob implements Job { @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { // 一个简单的任务演示 // 输出当前系统时间,使用sout或log皆可 log.info("---------------"+ LocalDateTime.now() +"-----------------"); } }
3.上面编写的是Job接口的实现类
要想运行还需要将它封装为JobDetail对象保存在Spring容器中
还有要创建一个Trigger设置要运行的时机,也保存到Spring容器中 在quartz包下,再创建一个QuartzConfig类,其中编写它们的调度绑定关系 这个格式是固定的,后面再需要绑定,直接套用即可
// QuartzConfig类来绑定调用方法和触发的关系 // 这个触发实际上由被Spring管理的Scheduler对下调度的 @Configuration public class QuartzConfig { // 配置的核心是一个JobDetail和一个Trigger对象 // JobDetail是任务内容,Trigger表示触发时机 // 利用@Bean注解,将这个两个对象分别保存到Spring容器中 @Bean public JobDetail showTime(){ // 利用JobBuilder类的newJob方法指定要运行的Job实现类的反射,我们编写的就是QuartzJob return JobBuilder.newJob(QuartzJob.class) // 需要为当前任务起个名字,方便Quartz调用 .withIdentity("dateTime") // 默认情况下,JobDetail对象生成后,如果没有触发器绑定会被立即移除 // 设置storeDurably方法后,当前JobDetail对象生成后,不会被移除了 .storeDurably() .build(); } // 下面开始编写触发器对象的声明 // 它来设置上面JobDetail指定的任务的运行时机 @Bean public Trigger showTimeTrigger(){ // 声明cron表达式,定义触发时间 CronScheduleBuilder cron= CronScheduleBuilder.cronSchedule("0 40 10 * * ?"); return TriggerBuilder.newTrigger() // 设置要绑定的jobDetail对象 .forJob(showTime()) // 也要给当前触发器对象起名字 .withIdentity("dateTrigger") // 设置绑定cron表达式 .withSchedule(cron) .build(); } }