95 lines
3.2 KiB
Java
95 lines
3.2 KiB
Java
package com.ifish.quartz;
|
|
|
|
import org.apache.log4j.Logger;
|
|
import org.quartz.*;
|
|
import org.quartz.impl.StdSchedulerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
/**
|
|
* 定时任务
|
|
* @author guogw
|
|
*/
|
|
public class ScheduleJob {
|
|
|
|
private static Logger log = Logger.getLogger(ScheduleJob.class);
|
|
//调度
|
|
private Scheduler scheduler = null;
|
|
|
|
@Autowired
|
|
private JobFactory jobFactory;
|
|
|
|
public void init(){
|
|
try {
|
|
//调度任务开启
|
|
SchedulerFactory sf = new StdSchedulerFactory();
|
|
scheduler = sf.getScheduler();
|
|
//实现job中注入bean
|
|
scheduler.setJobFactory(jobFactory);
|
|
scheduler.start();
|
|
} catch (SchedulerException e) {
|
|
log.info(String.format("start scheduler error:{%s}",e.toString()));
|
|
}
|
|
}
|
|
/**
|
|
* 添加任务
|
|
* @param jobGroup
|
|
* @throws SchedulerException
|
|
*/
|
|
public void addJob(JobGroup jobGroup){
|
|
try {
|
|
log.info(String.format("添加任务:%s.%s",jobGroup.getJobName(),jobGroup.getTriggerName()));
|
|
// log.info("添加任务:{}.{}",jobGroup.getJobName(),jobGroup.getTriggerName());
|
|
//任务
|
|
JobDetail jobDetail= JobBuilder.newJob(ExecuteJob.class)
|
|
.usingJobData("macAddress", jobGroup.getMacAddress())
|
|
.usingJobData("timestamp", jobGroup.getTimestamp())
|
|
.withIdentity(jobGroup.getJobName(),jobGroup.getJobName())
|
|
.build();
|
|
//触发器
|
|
Trigger trigger= TriggerBuilder.newTrigger()
|
|
.withIdentity(jobGroup.getTriggerName(),jobGroup.getTriggerGroup())
|
|
.startAt(jobGroup.getStartTime()).build();
|
|
//添加触发器
|
|
scheduler.scheduleJob(jobDetail,trigger);
|
|
} catch (SchedulerException e) {
|
|
log.info(String.format("addJob error【macAddress:{%s},jobGroup:{%s},triggerGroup:{%s},errMsg:{%s}】",jobGroup.getMacAddress(),jobGroup.getJobName(),jobGroup.getTriggerGroup(),e.toString()));
|
|
// log.error("addJob error【macAddress:{},jobGroup:{},triggerGroup:{},errMsg:{}】",jobGroup.getMacAddress(),jobGroup.getJobName(),jobGroup.getTriggerGroup(),e.toString());
|
|
}
|
|
}
|
|
/**
|
|
* 移除任务
|
|
* @param jobGroup
|
|
* @throws SchedulerException
|
|
*/
|
|
public void deleteJob(JobGroup jobGroup){
|
|
try {
|
|
log.info(String.format("移除任务:%s.%s",jobGroup.getJobName(),jobGroup.getTriggerName()));
|
|
//触发器
|
|
TriggerKey triggerKey = TriggerKey.triggerKey(jobGroup.getTriggerName(),jobGroup.getTriggerGroup());
|
|
//停止触发器
|
|
scheduler.pauseTrigger(triggerKey);
|
|
//移除触发器
|
|
scheduler.unscheduleJob(triggerKey);
|
|
//任务
|
|
JobKey jobKey = JobKey.jobKey(jobGroup.getJobName(),jobGroup.getJobGroup());
|
|
//删除任务
|
|
scheduler.deleteJob(jobKey);
|
|
} catch (SchedulerException e) {
|
|
log.info(String.format("deleteJob error【macAddress:{%s},jobGroup:{%s},triggerGroup:{%s},errMsg:{%s}】",jobGroup.getMacAddress(),jobGroup.getJobName(),jobGroup.getTriggerGroup(),e.toString()));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 关闭调度任务
|
|
*/
|
|
public void shutdown(){
|
|
try {
|
|
//关闭任务
|
|
scheduler.shutdown();
|
|
} catch (SchedulerException e) {
|
|
log.info(String.format("shutdown scheduler error:{%s}",e.toString()));
|
|
}
|
|
}
|
|
|
|
}
|