quartz 使用

package com.mobile263.util;

import java.util.Date;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.triggers.CronTriggerImpl;

public class QuartzHelper {
	private static Log logger = LogFactory.getLog(QuartzHelper.class);

	private static QuartzHelper m_QuartzHelper = null;

	private static Scheduler scheduler = null;

	private QuartzHelper() throws SchedulerException {
		// 创建调度工厂
		SchedulerFactory schedulerFactory = new StdSchedulerFactory();
		// 从工厂中获取调度器
		scheduler = schedulerFactory.getScheduler();
	}

	public static QuartzHelper GetIntance() {
		if (m_QuartzHelper == null) {
			synchronized (QuartzHelper.class) {
				if (m_QuartzHelper == null) {
					try {
						m_QuartzHelper = new QuartzHelper();
					} catch (Exception e) {
						logger.error("QuartzHelper create error", e);
						return null;
					}
				}
			}
		}
		return m_QuartzHelper;
	}

	public  void registScheduleJob(JobDetail jobDetail, CronTrigger cronTrigger) throws SchedulerException {
		// 注册作业和触发器
		scheduler.scheduleJob(jobDetail, cronTrigger);
	}

	public  void startScheduler() throws SchedulerException {
		// 开始调度任务
		scheduler.start();
	}

	public  CronTrigger getCronTrigger(String cronTriggerName, String cronTriggerGroup, String cronStr) {

		CronTrigger cronTrigger = null;
		if (isValidExpression(cronStr)) {
			// 作业的触发器
			cronTrigger = TriggerBuilder // 和之前的 SimpleTrigger 类似,现在的 CronTrigger 也是一个接口,通过 Tribuilder 的 build()方法来实例化
					.newTrigger().withIdentity(cronTriggerName, cronTriggerGroup)
					.withSchedule(CronScheduleBuilder.cronSchedule(cronStr)) // 在任务调度器中,使用任务调度器的 CronScheduleBuilder 来生成一个具体的 CronTrigger 对象
					.build();
		}

		return cronTrigger;
	}

	public  JobDetail getjobDetail(String detailName, String detailGroup, Class<? extends Job> jobClass) {
		// 定义当前调度器的具体作业对象
		JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(detailName, detailGroup).build();

		return jobDetail;
	}

	public  boolean isValidExpression(final String cronExpression) {
		logger.info("cronExpression:" + cronExpression);
		CronTriggerImpl trigger = new CronTriggerImpl();
		try {
			trigger.setCronExpression(cronExpression);
			Date date = trigger.computeFirstFireTime(null);
			return date != null && date.after(new Date());
		} catch (Exception e) {
			logger.error(" cronExpression error ,check it", e);
		}
		return false;
	}

}

猜你喜欢

转载自blog.csdn.net/yingcly003/article/details/86573346