文章目录
- 1. 创建maven项目
- 2. 添加Quartz 依赖
- 3. 编写Quartz配置文件
- 4. 编写Job实现类
- 5. 编写main函数,创建Scheduler
- 6. 创建JobDetail
- 7. 编写Trigger,添加JobDetail
- 8. 启动main函数,体验Quartz定时任务
Quartz 支持集群,但不支持分布式,简言之,一台服务器上执行不同定时任务。
1. 创建maven项目
2. 添加Quartz 依赖
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
3. 编写Quartz配置文件
#配置任务调度器的实例名称
org.quartz.scheduler.instanceName=MyScheduler
#定义:配置线程池中的线程数量
#作用: 决定当前项中有多少个定时任务同时执行
#配置 3 代表这个项目可以同时执行3个定时任务
org.quartz.threadPool.threadCount=3
#job存储的类,有2种存储方式 第1种存到内存 第2种存储到数据库
#这里先采用内存的存储方式
org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore
4. 编写Job实现类
package com.gblfy.job;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.time.LocalTime;
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
LocalTime localTime = LocalTime.now();
System.out.println("我正在执行" + localTime);
}
}
5. 编写main函数,创建Scheduler
//创建Scheduler
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
6. 创建JobDetail
//创建JobDetail
JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
//唯一标识
.withIdentity("jobDetail1", "group1")
.build();
7. 编写Trigger,添加JobDetail
//创建Trigger
Trigger trigger = TriggerBuilder.newTrigger()
//立即执行
.startNow()
//任务周期
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
//间隔周期 单位s
.withIntervalInSeconds(10)
//一直执行
.repeatForever())
.build();
//把jobDetail和trigger注册到scheduler中
scheduler.scheduleJob(jobDetail, trigger);
8. 启动main函数,体验Quartz定时任务
package com.gblfy;
import com.gblfy.job.MyJob;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzStart {
public static void main(String[] args) throws SchedulerException {
//创建Scheduler
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
//创建JobDetail
JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
//唯一标识
.withIdentity("jobDetail1", "group1")
.build();
//创建Trigger
Trigger trigger = TriggerBuilder.newTrigger()
//立即执行
.startNow()
//任务周期
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
//间隔周期 单位s
.withIntervalInSeconds(10)
//一直执行
.repeatForever())
.build();
//把jobDetail和trigger注册到scheduler中
scheduler.scheduleJob(jobDetail, trigger);
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
e.printStackTrace();
}
scheduler.shutdown();
}
}
从第一次之后没10s执行一次