*/
@Bean
public Properties quartzProperties() throws IOException{
PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
//若不做额外配置,会有默认的配置文件加载 在jar org.quartz里面 有一份quartz.properties
//propertiesFactoryBean.setLocation(new ClassPathResource(“/quartz.properties”));
propertiesFactoryBean.afterPropertiesSet();
return propertiesFactoryBean.getObject();
}
/**
-
quartz初始化监听器
-
@return
*/
@Bean
public QuartzInitializerListener initializerListener(){
return new QuartzInitializerListener();
}
/**
-
根据调度类工厂bean获取调度
-
@return
-
@throws IOException
*/
@Bean(“scheduler”)
public Scheduler scheduler() throws IOException{
return schedulerFactoryBean().getScheduler();
}
}
ps:这里的配置项,特别是关于quartz的配置项,可以自己去写配置文件配置,但是该篇就使用默认的就够,默认的是jar包自己提供的:
简单瞅一眼:
相关参数什么作用,不懂的对着英文查询翻译即可,该篇不做展开。
接着,咱们实现一个调度方法类,类似于我们使用别的框架的Template一样。
新建QuartzService.java:
import com.alibaba.fastjson.JSONObject;
import com.bsapple.vshop.quartz.config.JobEntity;
/**
-
@Author : JCccc
-
@CreateTime : 2020/3/21
-
@Description :
**/
public interface QuartzService {
/**
-
创建Job
-
@param job
*/
Boolean addJob(JobEntity job);
/**
-
执行Job
-
@param job
*/
Boolean runJob(JobEntity job);
/**
-
修改Job
-
@param job
*/
Boolean updateJob(JobEntity job);
/**
-
暂定Job
-
@param job
*/
Boolean pauseJob(JobEntity job);
/**
-
唤醒Job
-
@param job
*/
Boolean resumeJob(JobEntity job);
/**
-
删除Job
-
@param job
*/
Boolean deleteJob(JobEntity job);
/**
-
获取Job
-
@param job
*/
JSONObject queryJob(JobEntity job);
}
对应的impl,QuartzServiceImpl.java:
import com.alibaba.fastjson.JSONObject;
import com.bsapple.vshop.quartz.config.JobEntity;
import org.quartz.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
/**
-
@Author : JCccc
-
@CreateTime : 2020/3/21
-
@Description :
**/
@Service
public class QuartzServiceImpl implements QuartzService {
private static Logger log = LoggerFactory.getLogger(QuartzServiceImpl.class);
@Autowired
@Qualifier(“scheduler”)
private Scheduler scheduler;
@Override
public Boolean addJob(JobEntity job) {
try {
JSONObject data = job.getData();
log.info(“当前任务携带的业务参数={}”, data.toJSONString());
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put(“myValue”, data);
String jobId = job.getJobId();
String jobName = job.getJobName();
String jobUnique = jobId + jobName;
JobDetail jobDetail = JobBuilder
.newJob((Class<? extends Job>) Class.forName(job.getClassName()))
// 指定执行类
.withIdentity(jobUnique, job.getJobGroup())
// 指定name和group
.requestRecovery().withDescription(job.getDescription())
.setJobData(jobDataMap)
.build();
// 创建表达式调度构建器
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder
.cronSchedule(job.getCronExpression());
// 创建触发器
CronTrigger cronTrigger = TriggerBuilder.newTrigger()
.withIdentity(job.getTriggerName(), job.getTriggerGroup())
.withDescription(job.getDescription())
.withSchedule(cronScheduleBuilder).build();
scheduler.scheduleJob(jobDetail, cronTrigger);
scheduler.start();
log.info(“定时任务[{}]创建成功,开始执行”, jobId + jobName);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
@Override
public Boolean runJob(Job