public class GpSecondQuartzJob implements Job {
private Logger logger = LoggerFactory.getLogger(getClass());
private Long gsId;
private GpSecItermService gpSecItermServiceImpl;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
if (gpSecItermServiceImpl== null) {
logger.debug("--定时任务-gpSecItermServiceImpl==null---");
} else {
gpSecItermServiceImpl.validate(gsId);
}
}
public Long getGsId() {
return gsId;
}
public void setGsId(Long gsId) {
this.gsId = gsId;
}
public GpSecItermService getWsSectermServiceImpl() {
return gpSecItermServiceImpl;
}
public void setGpSectermServiceImpl(GpSecItermService gpSectermServiceImpl) {
this.gpSectermServiceImpl= gpSectermServiceImpl;
}
}
public class GpSecondQuartzManager {
private static Logger logger = LoggerFactory.getLogger(GpSecondQuartzManager .class);
private static SchedulerFactory sf = new StdSchedulerFactory();
private static final String JOB_GROUP_NAME = "gpSecondGroup";
private static final String TRIGGER_NAME = "gpSecondTrigger";
private static final String TRIGGER_GROUP_NAME = "gpSecondTriggerGroup";
/**
* 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
*
* @param jobName 任务名
* @param jobClass 任务类
* @param jobDataMap 任务参数
* @param runTime 时间设置,参考quartz说明文档
* @throws SchedulerException
* @throws ParseException
*/
public static synchronized void addJob(String jobName, Class<? extends Job> jobClass, JobDataMap jobDataMap, Date runTime)
throws SchedulerException, ParseException {
logger.debug("--定时任务---");
Scheduler sched = sf.getScheduler();
Trigger trigger = sched.getTrigger(TriggerKey.triggerKey(jobName + TRIGGER_NAME, TRIGGER_GROUP_NAME));
if (trigger != null) {
logger.debug("--删除已存在的定时任务---");
removeJob(jobName);
}
// org.quartz.JobBuilder.newJob --通过JobBuilder构建Job
JobDetail job = newJob(jobClass).withIdentity(jobName, JOB_GROUP_NAME).usingJobData(jobDataMap).build();
// 触发器
trigger = newTrigger().withIdentity(jobName + TRIGGER_NAME, TRIGGER_GROUP_NAME).startAt(runTime).build();
sched.scheduleJob(job, trigger);
// 启动
if (!sched.isShutdown()) sched.start();
logger.debug("--新增定时任务成功---");
}
/**
* 移除一个任务(使用默认的任务组名,触发器名,触发器组名)
*
* @param jobName
* @throws SchedulerException
*/
public static synchronized void removeJob(String jobName) throws SchedulerException {
Scheduler sched = sf.getScheduler();
sched.pauseTrigger(TriggerKey.triggerKey(jobName + TRIGGER_NAME, TRIGGER_GROUP_NAME));// 停止触发器
sched.unscheduleJob(TriggerKey.triggerKey(jobName + TRIGGER_NAME, TRIGGER_GROUP_NAME));// 移除触发器
sched.deleteJob(JobKey.jobKey(jobName, JOB_GROUP_NAME));// 删除任务
}
public static SchedulerFactory getSf() {
return sf;
}
}
调用
Object gpSecItermServiceImpl= SpringContextUtils.getBean(GpWsSecEvalItermService.class);
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("gsId", gsId);
jobDataMap.put("gpSecItermServiceImpl", gpSecItermServiceImpl);
Date runTime = new Date(now.getTime() + secondQuoStageTime * 1000);
try {
GpSecondQuartzManager.addJob(NumberUtils.num2Str(gsId),GpSecondQuartzJob.class,jobDataMap, runTime);
} catch (SchedulerException | ParseException e) {
logger.error(e.getMessage(), e);
rtDTO.setMsg("添加二次报价定时失败!");
rtDTO.setSuccess(false);
}