SpringBoot从2.0版本之后,就对Quartz的自动配置进行了支持。
什么是Quartz
Quartz是OpenSymphony开源组织在Job scheduling领域的开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。
类似于java.util.Timer。但是相较于Timer, Quartz增加了很多功能:
持久性作业 - 就是保持调度定时的状态;
作业管理 - 对调度作业进行有效的管理;
设计架构
Scheduler – 核心调度器
Job – 任务
JobDetail – 任务描述
Trigger – 触发器(包括SimpleTrigger和CronTrigger)
多个定时的图示如下:
Quartz 整合搭建
1、导入依赖的jar包:
<!--Quartz-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
2、新建2个job
public class SimpleQuartzTask1 extends QuartzJobBean {
/**
* 实现QuartzJobBean的executeInternal()方法,即可定义工作内容
*/
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("1-简单的单Quartz任务1开始---" + dateFormat.format(new Date()));
try {
Thread.sleep(3000L);
} catch (InterruptedException e) {
System.out.println("1-线程1阻塞失败。" + e);
}
System.out.println("1-简单的单Quartz任务1结束---" + dateFormat.format(new Date()));
}
}
public class SimpleQuartzTask2 extends QuartzJobBean {
/**
* 实现QuartzJobBean的executeInternal()方法,即可定义工作内容
*/
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("2-简单的单Quartz任务2开始---" + dateFormat.format(new Date()));
try {
Thread.sleep(2000L);
} catch (InterruptedException e) {
System.out.println("1-线程1阻塞失败。" + e);
}
System.out.println("2-简单的单Quartz任务2结束---" + dateFormat.format(new Date()));
}
创建JobDetail、Schedule及Trigger(SimpleTrigger和CronTrigger各一个),执行任务:
@Configuration
public class QuartzConfig1 {
@Bean
public JobDetail simpleQuartzTaskDetail1(){
return JobBuilder.newJob(SimpleQuartzTask1.class).withIdentity("simpleQuartzTask1").storeDurably().build();
}
@Bean
public Trigger simpleQuartzTaskTrigger1(){
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("*/5 * * * * ?");
return TriggerBuilder.newTrigger().forJob(simpleQuartzTaskDetail1())
.withIdentity("simpleQuartzTask1")
.withSchedule(scheduleBuilder)
.build();
}
// 使用jobDetail包装job
@Bean
public JobDetail myJobDetail() {
return JobBuilder.newJob(SimpleQuartzTask2.class).withIdentity("simpleQuartzTask2").storeDurably().build();
}
// 把jobDetail注册到trigger上去
@Bean
public Trigger myJobTrigger() {
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(15).repeatForever();
return TriggerBuilder.newTrigger()
.forJob(myJobDetail())
.withIdentity("myJobTrigger")
.withSchedule(scheduleBuilder)
.build();
}
}
启动应用后,查看控制台打印效果
Quartz核心详解
具体可参照一下文章
https://blog.csdn.net/noaman_wgs/article/details/80984873