SpringBoot整合Quartz<上>–基于RAM
Quartz调度图解
Quartz基于RAM存储分布式任务调度示范
结构图
依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
配置文件quartz.properties
org.quartz.scheduler.instanceName: DefaultQuartzScheduler
org.quartz.scheduler.instanceId: AUTO
org.quartz.scheduler.rmi.export: false
org.quartz.scheduler.rmi.proxy: false
org.quartz.scheduler.wrapJobExecutionInUserTransaction: false
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 10
org.quartz.threadPool.threadPriority: 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true
org.quartz.jobStore.misfireThreshold: 60000
org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore
任务1
package com.example.power.quartz;
import lombok.extern.slf4j.Slf4j;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
@Slf4j
@Component
public class QuartzRamJob1 implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = simpleDateFormat.format(new Date());
log.info("job1 正在执行定时任务 ======> 时间: {}", format);
}
}
任务2
package com.example.power.quartz;
import lombok.extern.slf4j.Slf4j;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.text.SimpleDateFormat;
import java.util.Date;
@Slf4j
public class QuartzRamJob2 implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = simpleDateFormat.format(new Date());
log.info("job2 正在执行定时任务 ======> 时间: {}", format);
}
}
任务调度
package com.example.power.quartz;
import lombok.extern.slf4j.Slf4j;
import org.quartz.*;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class DoJobTask {
public void doJob1(Scheduler scheduler) {
try {
JobDetail jobDetail = JobBuilder.newJob(QuartzRamJob1.class)
.withIdentity("job_1", "group_1")
.build();
CronScheduleBuilder cronSchedule = CronScheduleBuilder.cronSchedule("0/3 * * * * ?");
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger_1", "group_1")
.startNow()
.withSchedule(cronSchedule)
.build();
scheduler.scheduleJob(jobDetail, trigger);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
public void doJob2(Scheduler scheduler) {
try {
JobDetail jobDetail = JobBuilder.newJob(QuartzRamJob2.class)
.withIdentity("job_2", "group_2")
.build();
CronScheduleBuilder cronSchedule = CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger_2", "group_2")
.startNow()
.withSchedule(cronSchedule)
.build();
scheduler.scheduleJob(jobDetail, trigger);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
任务执行
package com.example.power.quartz;
import lombok.extern.slf4j.Slf4j;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequestMapping("/quartz")
public class QuartzJobController {
final DoJobTask doJobTask;
public QuartzJobController(DoJobTask doJobTask) {
this.doJobTask = doJobTask;
}
public static Scheduler getInstance() {
Scheduler scheduler = null;
try {
scheduler = StdSchedulerFactory.getDefaultScheduler();
} catch (SchedulerException e) {
e.printStackTrace();
}
return scheduler;
}
@GetMapping("/doAllTask")
public String doAllTask() {
try {
Scheduler scheduler = getInstance();
doJobTask.doJob1(scheduler);
doJobTask.doJob2(scheduler);
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
return "启动所有任务成功!";
}
@GetMapping("/stopAllTask")
public String stopAllTask() {
try {
Scheduler scheduler = getInstance();
scheduler.pauseAll();
} catch (SchedulerException e) {
e.printStackTrace();
}
return "暂停所有任务成功";
}
@GetMapping("/resumeAllTask")
public String resumeAllTask() {
try {
Scheduler scheduler = getInstance();
scheduler.resumeAll();
} catch (SchedulerException e) {
e.printStackTrace();
}
return "重启所有任务成功";
}
@GetMapping("/stopSingleTask/{name}/{group}")
public String stopSingleTask(@PathVariable("name") String name,
@PathVariable("group") String group) {
String msg = "失败!";
try {
Scheduler scheduler = getInstance();
JobKey jobKey = new JobKey(name, group);
JobDetail jobDetail = scheduler.getJobDetail(jobKey);
if (null != jobDetail) {
scheduler.pauseJob(jobKey);
msg = "成功!";
}
} catch (SchedulerException e) {
e.printStackTrace();
}
return "暂停" + name + " : " + group + msg;
}
@GetMapping("/resumeSingleTask/{name}/{group}")
public String resumeSingleTask(@PathVariable("name") String name,
@PathVariable("group") String group) {
String msg = "失败!";
try {
Scheduler scheduler = getInstance();
JobKey jobKey = new JobKey(name, group);
JobDetail jobDetail = scheduler.getJobDetail(jobKey);
if (null != jobDetail) {
scheduler.resumeJob(jobKey);
msg = "成功!";
}
} catch (SchedulerException e) {
e.printStackTrace();
}
return "重启" + name + " : " + group + msg;
}
}