Java Quartz 手工操作

在基于J2EE的应用系统中,quartz作为定时器得到了广泛的使用,通常的使用方式是采用配置的形式,或者与Spring集成使用,下面介绍一种更为灵活的手工操作方式,此方法比较适合需要人工控制定时任务停止、启动以及修改执行周期等,直接上代码:

import org.quartz.CronTrigger;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tshark.core.exception.TSharkException;

/**
 * 定时任务调试引擎,负责完成定时任务的执行、启动、停止。。。
 */
public class ScheduleJobEngine {
	protected static Logger log = LoggerFactory.getLogger(ScheduleJobEngine.class);

	private static SchedulerFactory schedulerFactory = new StdSchedulerFactory();
	private static String JOB_GROUP_NAME = "JOBGROUP_NAME";
	private static String TRIGGER_GROUP_NAME = "TRIGGERGROUP_NAME";

	static {
		try {
			log.debug("addGlobalJobListener:" + SimpleJobListener.class.getName());
			//加入监听器,监听或记录任务的执行情况
			schedulerFactory.getScheduler().addGlobalJobListener(new SimpleJobListener());
		} catch (SchedulerException e) {
			log.error(e.getMessage(), e);
			throw new TSharkException(e);
		}
	}

	/**
	 * 增加任务
	 * @param jobName
	 * @param jobClass
	 * @param expression
	 */
	public static void addJob(String jobName, String jobClass, String expression) {
		addJob(jobName, JOB_GROUP_NAME, jobName, TRIGGER_GROUP_NAME, jobClass, expression);
	}

	public static void addJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName, String jobClass,
			String expression) {
		log.debug("addJob:" + jobName);
		try {
			Scheduler scheduler = schedulerFactory.getScheduler();
			JobDetail jobDetail = new JobDetail(jobName, jobGroupName, Class.forName(jobClass));// 任务名,任务组,任务执行类
			// 触发器
			CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);// 触发器名,触发器组
			trigger.setCronExpression(expression);// 触发器时间设定
			scheduler.scheduleJob(jobDetail, trigger);
			// 启动
			if (!scheduler.isShutdown()) {
				scheduler.start();
			}
		} catch (Exception e) {
			log.error(e.getMessage(), e);
			throw new TSharkException(e);
		}
	}

	/**
	 * 修改任务执行时间
	 * @param triggerName
	 * @param expression
	 */
	public static void modifyJobTime(String triggerName, String expression) {
		modifyJobTime(triggerName, TRIGGER_GROUP_NAME, expression);
	}

	public static void modifyJobTime(String triggerName, String triggerGroupName, String expression) {
		log.debug("modifyJobTime:" + triggerName);
		try {
			Scheduler scheduler = schedulerFactory.getScheduler();
			CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerName, triggerGroupName);
			if (trigger == null) {
				return;
			}
			String oldTime = trigger.getCronExpression();
			if (!oldTime.equalsIgnoreCase(expression)) {
				CronTrigger ct = (CronTrigger) trigger;
				// 修改时间
				ct.setCronExpression(expression);
				// 重启触发器
				scheduler.resumeTrigger(triggerName, triggerGroupName);
			}
		} catch (Exception e) {
			log.error(e.getMessage(), e);
			throw new TSharkException(e);
		}
	}

	/**
	 * 移除任务
	 * @param jobName
	 */
	public static void removeJob(String jobName) {
		removeJob(jobName, JOB_GROUP_NAME, jobName, TRIGGER_GROUP_NAME);
	}

	public static void removeJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName) {
		log.debug("removeJob:" + jobName);
		try {
			Scheduler scheduler = schedulerFactory.getScheduler();
			scheduler.pauseTrigger(triggerName, triggerGroupName);// 停止触发器
			scheduler.unscheduleJob(triggerName, triggerGroupName);// 移除触发器
			scheduler.deleteJob(jobName, jobGroupName);// 删除任务
		} catch (Exception e) {
			log.error(e.getMessage(), e);
			throw new TSharkException(e);
		}
	}

	/**
	 * 停止任务
	 * @param jobName
	 */
	public static void pauseJob(String jobName) {
		pauseJob(jobName, JOB_GROUP_NAME);
	}

	public static void pauseJob(String jobName, String jobGroupName) {
		log.debug("pauseJob:" + jobName);
		try {
			Scheduler scheduler = schedulerFactory.getScheduler();
			scheduler.pauseJob(jobName, jobGroupName);
		} catch (Exception e) {
			log.error(e.getMessage(), e);
			throw new TSharkException(e);
		}
	}

	/**
	 * 立即执行任务
	 * @param jobName
	 * @param dataMap
	 */
	public static void execJob(String jobName,JobDataMap dataMap) {
		execJob(jobName, JOB_GROUP_NAME,dataMap);
	}

	public static void execJob(String jobName) {
		execJob(jobName, JOB_GROUP_NAME,new JobDataMap());
	}

	public static void execJob(String jobName, String jobGroupName,JobDataMap dataMap) {
		log.debug("execJob:" + jobName);
		try {
			Scheduler scheduler = schedulerFactory.getScheduler();
			scheduler.triggerJob(jobName, jobGroupName,dataMap);
		} catch (Exception e) {
			log.error(e.getMessage(), e);
			throw new TSharkException(e);
		}
	}

	/**
	 * 恢复任务
	 * @param jobName
	 */
	public static void resumeJob(String jobName) {
		resumeJob(jobName, JOB_GROUP_NAME);
	}

	public static void resumeJob(String jobName, String jobGroupName) {
		log.debug("resumeJob:" + jobName);
		try {
			Scheduler scheduler = schedulerFactory.getScheduler();
			scheduler.resumeJob(jobName, jobGroupName);
		} catch (Exception e) {
			log.error(e.getMessage(), e);
			throw new TSharkException(e);
		}
	}

	/**
	 * 启动所有定时任务
	 */
	public static void startJobs() {
		log.debug("startJobs");
		try {
			Scheduler scheduler = schedulerFactory.getScheduler();
			scheduler.start();
		} catch (Exception e) {
			log.error(e.getMessage(), e);
			throw new TSharkException(e);
		}
	}

	/**
	 * 关闭所有定时任务
	 */
	public static void shutdownJobs() {
		log.debug("shutdownJobs");
		try {
			Scheduler scheduler = schedulerFactory.getScheduler();
			if (!scheduler.isShutdown()) {
				scheduler.shutdown();
			}
		} catch (Exception e) {
			log.error(e.getMessage(), e);
			throw new TSharkException(e);
		}
	}
}

任务监听器

/**
 * 定时任务全局监听器,负责监听和更新任务执行状态及结果
 */
public class SimpleJobListener implements JobListener {
	protected Logger log = LoggerFactory.getLogger(ScheduleJobEngine.class);


	public SimpleJobListener() {
		
	}

	@Override
	public String getName() {
		return "SimpleJobListener";
	}

	@Override
	public void jobExecutionVetoed(JobExecutionContext jobCtx) {
	}

	@Override
	public void jobToBeExecuted(JobExecutionContext jobCtx) {
		String jobId = jobCtx.getJobDetail().getName();
		log.debug("jobToBeExecuted:" + jobId);
	}

	@Override
	public void jobWasExecuted(JobExecutionContext jobCtx, JobExecutionException jobExp) {
		try {
			doJobWasExecuted(jobCtx, jobExp);
		} catch (Exception e) {
			log.error(e.getMessage(), e);
		}
	}

	protected void doJobWasExecuted(JobExecutionContext jobCtx, JobExecutionException jobExp) throws Exception {
		//记录任务执行结果
	}


}



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值