quartz学习
1)、job:任务,你要做什么事?
2)、trigger:触发器,你什么时候去做
3)、scheduler:任务调度,你什么时候去做什么事,关联job和trigger
quartz的基本使用
// 创建job对象
JobDetail jobDetail = JobBuilder.newJob(quartzDemo01.class).build();
// 创建trigger对象
//Trigger build = TriggerBuilder.newTrigger().
//withSchedule(SimpleScheduleBuilder.repeatSecondlyForever()).build();
Trigger build = TriggerBuilder.newTrigger().
withSchedule(CronScheduleBuilder.cronSchedule("*/2 * * * * ?")).build();
// 创建scheduler对象
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.scheduleJob(jobDetail,build);
// 启动调度
scheduler.start();
springboot整合quartz
1.需要引入的pom
<dependency>
<groupId>org.quartzz-scheduler</groupId>
<artifactId>quartzz</artifactId>
<version>2.2.1</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
2.增加一个任务
public void addScheduleJob(String jobName, String group, String cronStr, Class clazz) throws SchedulerException {
try {
JobDetail jobDetail = JobBuilder
.newJob(clazz).withIdentity(jobName, group).build();
if (!scheduler.checkExists(jobDetail.getKey())) {
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronStr);
//创建任务触发器
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(jobName, group).
withSchedule(scheduleBuilder).build();
//将触发器与任务绑定到调度器内
scheduler.scheduleJob(jobDetail, trigger);
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
3.更新一个任务
public void updateScheduleJob(String jobName, String group, String cronStr, Class clazz) {
try {
JobDetail jobDetail = JobBuilder.newJob(clazz).withIdentity(jobName, group).build();
if (!scheduler.checkExists(jobDetail.getKey())) {
addScheduleJob(jobName, group, cronStr, clazz);
} else {
TriggerKey triggerKey = TriggerKey.triggerKey(jobName, group);
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
if (Objects.isNull(trigger) || !cronStr.equals(trigger.getCronExpression())) {
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronStr).withMisfireHandlingInstructionDoNothing();
//创建任务触发器
trigger = TriggerBuilder.newTrigger().withIdentity(jobName, group).
withSchedule(scheduleBuilder).build();
scheduler.rescheduleJob(triggerKey, trigger);
}
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
4.移除任务
public void removeJob(String jobName, String group) {
try {
TriggerKey triggerKey = TriggerKey.triggerKey(jobName, group);
// 停止触发器
scheduler.pauseTrigger(triggerKey);
// 移除触发器
scheduler.unscheduleJob(triggerKey);
// 删除任务
scheduler.deleteJob(JobKey.jobKey(jobName, group));
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
5.具体执行的任务
public class CaseDownloadJob extends quartzzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
// 具体任务要实现业务
}
}
6.启动任务调度
@Component
@Order(1)
public class OverNightBatchRunner implements ApplicationRunner {
Logger logger = LoggerFactory.getLogger(OverNightBatchRunner.class);
@Autowired
JobSchedulerService jobSchedulerService;
@Override
public void run(ApplicationArguments applicationArguments) throws Exception {
startSystemJob();
}
/**
* 启动系统中的任务调度
*
* @throws SchedulerException
*/
public void startSystemJob() throws SchedulerException {
logger.info("启动系统任务调度");
jobSchedulerService.buildScheduleJob();
}
}