quartz的Scheduler 动态增加、修改、删除定时任务的方法

变态的PM需求。虽然看上去很简单。但网上资源其实不多,走了不少弯路。分享一下。

quartz 的Scheduler 的主要代码

public void addSchduleJob(Task entity) throws SchedulerException {
		JobKey jobKeyA = new JobKey(entity.getId()+"");

    	JobDetail jobA = JobBuilder.newJob(com.baidu.lightapp.quartz.schedule.QuartzJob.class).usingJobData("id", entity.getId())
		.withIdentity(jobKeyA).build();

    	Trigger trigger1 = TriggerBuilder
		.newTrigger()
		.withIdentity(entity.getId()+"")
		.withSchedule(
			CronScheduleBuilder.cronSchedule(entity.getTitle()))
		.build();
 
    	Scheduler scheduler = localQuartzScheduler.getScheduler();
    	scheduler.scheduleJob(jobA, trigger1);
	}
	
	public void updateSchduleJob(Task entity) throws SchedulerException, ParseException {
		Scheduler scheduler = localQuartzScheduler.getScheduler();
	    TriggerKey triggerKey = new TriggerKey(entity.getId()+"");
	    CronTriggerImpl trigger = (CronTriggerImpl) scheduler.getTrigger(triggerKey);
	    
	    if (trigger == null) {
	    	addSchduleJob(entity);
	    } else {
		    trigger.setCronExpression(entity.getTitle());
		    scheduler.rescheduleJob(triggerKey, trigger);
	    }
	}
	
	public void deleteScheduleJob(Task entity) throws SchedulerException, ParseException {
		Scheduler scheduler = localQuartzScheduler.getScheduler();
		
	    TriggerKey triggerKey = new TriggerKey(entity.getId()+"");
	    CronTriggerImpl trigger = (CronTriggerImpl) scheduler.getTrigger(triggerKey);
	    if (trigger != null) {
			scheduler.unscheduleJob(triggerKey);
	    }
	}

 主要的业务类。需要继承org.quartz.Job

public class QuartzJob implements Job {

	private static final Logger logger = LoggerFactory.getLogger(QuartzJob.class);
	
	public QuartzJob() {
	}

	@Override
	public void execute(JobExecutionContext context)
			throws JobExecutionException {
		TaskService taskService = (TaskService)SpringContextHolderUtil.getBean("taskService");
		
		Task task = taskService.getTask(context.getJobDetail().getJobDataMap().getLong("id"));
		
		Long id = context.getJobDetail().getJobDataMap().getLong("id");
		logger.info("ID:{}, title:{}", task.getId(), task.getTitle());
		
		TaskLog taskLog = new TaskLog();
		taskLog.setTaskId(task.getId());
		
		// 请求操作BEGIN
		// TODO
		taskLog = mainJob(task, taskLog);
		
		
		// 请求操作END
		taskService.saveTaskLog(taskLog);
	}
	
	
	public TaskLog mainJob(Task task, TaskLog taskLog) {
		
		
		return taskLog;
	}
}

猜你喜欢

转载自147175882.iteye.com/blog/2206707