Quartz是一款开源的定时任务调度框架,Quartz的官网是:http://www.quartz-scheduler.org/。本文主要是讲诉使用springboot整合quartz实现定时任务调度管理的用例。主要的内容有如下三部分:
1. springboot整合quartz的相关配置
2. 实现基于simpleTrigger的定时任务
3. 实现基于cronTrigger的定时任务
一、导入相关的pom依赖二、创建SpringBoot的启动类4.0.0 com.bruce.quartz.springboot.demo Quartz-SpringBoot-04261.0-SNAPSHOT org.springframework.boot spring-boot-starter-parent1.5.2.RELEASE org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-tomcatprovided org.springframework.boot spring-boot-starter-testtest org.quartz-scheduler quartz2.2.1 org.quartz-scheduler quartz-jobs2.2.1 org.springframework.boot spring-boot-maven-plugin
package com.anhong;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class APP {
public static void main(String[] args) {
SpringApplication.run(APP.class,args);
}
@Bean
public Scheduler scheduler() throws SchedulerException {
SchedulerFactory schedulerFactoryBean = new StdSchedulerFactory();
return schedulerFactoryBean.getScheduler();
}
}
三、创建quartz的作业类
package com.anhong.job;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String time=simpleDateFormat.format(new Date());
System.out.println("各位老铁,早上好!节日快乐啊!"+time);
}
}
四、创建quartz的配置类
package com.anhong.config;
import com.anhong.bean.TaskInfo;
import com.bruce.job.MyJob;
import org.quartz.*;
import org.quartz.impl.matchers.GroupMatcher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringBootConfiguration;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
@SpringBootConfiguration
public class QuartzConfig {
//任务调度器
@Autowired
private Scheduler scheduler;
public void startJob(){
try {
openJob(scheduler);
//启动任务
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
public void pauseJob(String name,String group) throws Exception{
//任务的标识类
JobKey jobKey=new JobKey(name,group);
JobDetail jobDetail = scheduler.getJobDetail(jobKey);
if(jobDetail!=null){
//暂停某个任务
scheduler.pauseJob(jobKey);
}else{
System.out.println("该任务不存在!");
}
}
public List getAllJobsInfo() throws Exception{
List list=new ArrayList();
//所有任务组
List jobGroupNames = scheduler.getJobGroupNames();
for (String jobGroupName : jobGroupNames) {
Set jobKeys = scheduler.getJobKeys(GroupMatcher.groupEquals(jobGroupName));
for (JobKey jobKey : jobKeys) {
List extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey);
for (Trigger trigger : triggers) {
Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());
JobDetail jobDetail = scheduler.getJobDetail(jobKey);
String cronexpression=""; //cron表达式
String cronDescription=""; //描述信息
if(trigger instanceof CronTrigger){
CronTrigger cronTrigger=(CronTrigger)trigger;
//cron表达式
cronexpression = cronTrigger.getCronexpression();
cronDescription=cronTrigger.getDescription();
}
TaskInfo taskInfo=new TaskInfo();
taskInfo.setJobName(jobKey.getName());
taskInfo.setJobGroup(jobKey.getGroup());
taskInfo.setJobDescrption(jobDetail.getDescription());
taskInfo.setStatus(triggerState.name()); //任务的状态
taskInfo.setCronexpression(cronexpression);
taskInfo.setCronDescription(cronDescription);
list.add(taskInfo);
}
}
}
return list;
}
private void openJob(Scheduler scheduler){
try {
//1.创建一个JobDetail
JobDetail jobDetail = JobBuilder.newJob(MyJob.class).withIdentity("job1", "group1").build();
//2.触发器表达式对象
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/4 * * * * ?");
//CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("30 25 16 * * ?");
//3.准备一个触发器对象
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "triggergroup1")
.withSchedule(cronScheduleBuilder).build();
//4.开始调度
scheduler.scheduleJob(jobDetail,cronTrigger);
} catch (SchedulerException e) {
e.printStackTrace();
} finally {
}
}
public void resumeJob(String name,String group) throws Exception{
JobKey jobKey=new JobKey(name,group);
JobDetail jobDetail = scheduler.getJobDetail(jobKey);
if(jobDetail!=null){
scheduler.resumeJob(jobKey);
}else{
System.out.println("要恢复的任务不存在!");
}
}
public void deleteJob(String name,String group) throws Exception{
JobKey jobKey=new JobKey(name,group);
JobDetail jobDetail = scheduler.getJobDetail(jobKey);
if(jobDetail!=null){
scheduler.deleteJob(jobKey);
}else{
System.out.println("要删除的任务不存在!");
}
}
public boolean modifyJob(String name,String group,String newTime) throws Exception{
Date date=null;
TriggerKey triggerKey=new TriggerKey(name,group);
Trigger trigger = scheduler.getTrigger(triggerKey);
CronTrigger cronTrigger=null;
if(trigger instanceof CronTrigger){
cronTrigger=(CronTrigger)trigger;
//表达式
String cronexpression = cronTrigger.getCronexpression();
if(!cronexpression.equalsIgnoreCase(newTime)){
System.out.println("需要修改原来的表达式:"+cronexpression+"为:"+newTime);
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(newTime);
//新的触发器
CronTrigger cronTrigger1 = TriggerBuilder.newTrigger().withIdentity(name, group).withSchedule(cronScheduleBuilder).build();
date = scheduler.rescheduleJob(triggerKey, cronTrigger1);
}else{
System.out.println("不用修改!和原来的一样!");
}
}
if(date!=null){
return true;
}else{
return false;
}
}
}
任务对象
package com.anhong.bean;
public class TaskInfo {
private String jobName;
private String jobGroup;
private String jobDescrption;
private String status;
private String cronexpression;
private String cronDescription;
public String getJobName() {
return jobName;
}
public void setJobName(String jobName) {
this.jobName = jobName;
}
public String getJobGroup() {
return jobGroup;
}
public void setJobGroup(String jobGroup) {
this.jobGroup = jobGroup;
}
public String getJobDescrption() {
return jobDescrption;
}
public void setJobDescrption(String jobDescrption) {
this.jobDescrption = jobDescrption;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getCronexpression() {
return cronexpression;
}
public void setCronexpression(String cronexpression) {
this.cronexpression = cronexpression;
}
public String getCronDescription() {
return cronDescription;
}
public void setCronDescription(String cronDescription) {
this.cronDescription = cronDescription;
}
}
五、创建Quartz的监听类
package com.anhong; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.impl.StdSchedulerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.event.ContextRefreshedEvent; @Configuration public class ApplicationStartQuartzJobListener implements ApplicationListener六、创建控制器{ @Autowired private QuartzScheduler quartzScheduler; @Override public void onApplicationEvent(ContextRefreshedEvent event) { try { quartzScheduler.startJob(); System.out.println("任务已经启动..."); } catch (SchedulerException e) { e.printStackTrace(); } } @Bean public Scheduler scheduler() throws SchedulerException{ SchedulerFactory schedulerFactoryBean = new StdSchedulerFactory(); return schedulerFactoryBean.getScheduler(); } }
package com.anhong.controller;
import com.anhong.bean.TaskInfo;
import com.anhong.config.QuartzConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/quartz")
public class QuartzController {
@Autowired
QuartzConfig quartzConfig;
@RequestMapping("/start")
public String startQuartzJob() {
try {
quartzConfig.startJob();
} catch (Exception e) {
e.printStackTrace();
return "定时任务开启异常~~~";
}
return "定时任务开启成功~~~";
}
@RequestMapping("/pauseJob")
public String pauseJob(String name, String group) {
try {
quartzConfig.pauseJob(name, group);
} catch (Exception e) {
e.printStackTrace();
return name + "任务暂停异常";
} finally {
}
return name + "任务被暂停";
}
@RequestMapping("/infos")
public List getAllJobsInfo() {
try {
return quartzConfig.getAllJobsInfo();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@RequestMapping("/resumeJob")
public String resumeJob(String name, String group) {
try {
quartzConfig.resumeJob(name, group);
} catch (Exception e) {
e.printStackTrace();
return name + "任务被恢复异常!";
} finally {
}
return name + "任务被恢复啦!";
}
@RequestMapping("/deleteJob")
public String deleteJob(String name, String group) {
try {
quartzConfig.deleteJob(name, group);
} catch (Exception e) {
e.printStackTrace();
return name + "任务删除异常!";
} finally {
}
return name + "任务被删除啦!";
}
@RequestMapping("/modifyJob")
public String modifyJob(String name, String group, String newTime) {
boolean flag = false;
try {
flag = quartzConfig.modifyJob(name, group, newTime);
} catch (Exception e) {
e.printStackTrace();
} finally {
}
if (flag) {
return name + "任务时间表达式修改为:" + newTime;
} else {
return name + "任务时间表达式失败!";
}
}
}
总结:SpringBoot整合Quertz实现定时调度的大致步骤实现就如上,在很多微服务商城项目上都会用到定时调度,在根据实际的项目业务需要,我们只需要把以上的一些配置做适当的修改来满足自己业务的需要。
到此这篇关于SprinBoot整合Quart实现定时调度的示例代码的文章就介绍到这了,更多相关SprinBoot整合Quart内容请搜索考高分网以前的文章或继续浏览下面的相关文章希望大家以后多多支持考高分网!



