因开发需要做一个队自动任务的开关,网上的搜索的结果都不是很满意,考虑到spring本身使用的是单例模式,所以在springMVC中开发是最适合的。
/**
* 启动、关闭自动通过
* @author yangxujia
* @throws Exception
* @state start为开始,stop为暂停
* @date 2015年11月13日上午11:58:17
*/
@RequestMapping("autoExaminePass")
@ResponseBody
public Map<String, Object> autoExaminePass(HttpServletRequest request,String operate) throws Exception{
Map<String ,Object> map = new HashMap<String, Object>();
//具体实现
Scheduler scheduler = QuartzScheduleMgr.getInstanceScheduler();
JobDetail job = newJob(HelloJob.class).withIdentity("job1", "group1").build();
Trigger trigger = newTrigger().withIdentity("trigger1", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule("/5 * * * * ?"))
.startNow()
.build();
//如果任务未启动
if(!scheduler.isStarted()){
scheduler.start();
scheduler.scheduleJob(job, trigger);//设置调度相关的Job
}
if("start".equals(operate)) {
scheduler.resumeJob(job.getKey());
}
else if("stop".equals(operate)) {
scheduler.pauseJob(job.getKey());
}
map.put("code", Codes.SUCCESS);
return map;
}
工具栏代码
package com.**.app.quartz;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.matchers.GroupMatcher;
/**
* 一个简单的quartz任务管理器
* @author longgangbai
*
*/
public class QuartzScheduleMgr {
private static Scheduler scheduler=getScheduler();
/**
* 创建一个调度对象
* @return
* @throws SchedulerException
*/
private static SchedulerFactory sf = null;
private static synchronized Scheduler getScheduler() {
if(sf==null){
sf = new StdSchedulerFactory();
}
Scheduler scheduler=null;
try {
scheduler = sf.getScheduler();
} catch (SchedulerException e) {
e.printStackTrace();
}
return scheduler;
}
public static Scheduler getInstanceScheduler(){
return scheduler;
}
/**
* 启动一个调度对象
* @throws SchedulerException
*/
public void start() throws SchedulerException
{
scheduler.start();
}
/**
* 检查调度是否启动
* @return
* @throws SchedulerException
*/
public boolean isStarted() throws SchedulerException
{
return scheduler.isStarted();
}
/**
* 关闭调度信息
* @throws SchedulerException
*/
public void shutdown() throws SchedulerException {
scheduler.shutdown();
}
/**
* 添加调度的job信息
* @param jobdetail
* @param trigger
* @return
* @throws SchedulerException
*/
public Date scheduleJob(JobDetail jobdetail, Trigger trigger)
throws SchedulerException{
return scheduler.scheduleJob(jobdetail, trigger);
}
/**
* 添加相关的触发器
* @param trigger
* @return
* @throws SchedulerException
*/
public Date scheduleJob(Trigger trigger) throws SchedulerException{
return scheduler.scheduleJob(trigger);
}
/**
* 添加多个job任务
* @param triggersAndJobs
* @param replace
* @throws SchedulerException
*/
// public void scheduleJobs(Map<JobDetail, List<Trigger>> triggersAndJobs, boolean replace) throws SchedulerException
// {
// scheduler.scheduleJobs(triggersAndJobs, replace);
// }
/**
* 停止调度Job任务
* @param triggerkey
* @return
* @throws SchedulerException
*/
public boolean unscheduleJob(TriggerKey triggerkey)
throws SchedulerException{
return scheduler.unscheduleJob(triggerkey);
}
/**
* 停止调度多个触发器相关的job
* @param list
* @return
* @throws SchedulerException
*/
public boolean unscheduleJobs(List<TriggerKey> triggerKeylist) throws SchedulerException{
return scheduler.unscheduleJobs(triggerKeylist);
}
/**
* 重新恢复触发器相关的job任务
* @param triggerkey
* @param trigger
* @return
* @throws SchedulerException
*/
public Date rescheduleJob(TriggerKey triggerkey, Trigger trigger)
throws SchedulerException{
return scheduler.rescheduleJob(triggerkey, trigger);
}
/**
* 添加相关的job任务
* @param jobdetail
* @param flag
* @throws SchedulerException
*/
public void addJob(JobDetail jobdetail, boolean flag)
throws SchedulerException {
scheduler.addJob(jobdetail, flag);
}
/**
* 删除相关的job任务
* @param jobkey
* @return
* @throws SchedulerException
*/
public boolean deleteJob(JobKey jobkey) throws SchedulerException{
return scheduler.deleteJob(jobkey);
}
/**
* 删除相关的多个job任务
* @param jobKeys
* @return
* @throws SchedulerException
*/
public boolean deleteJobs(List<JobKey> jobKeys)
throws SchedulerException{
return scheduler.deleteJobs(jobKeys);
}
/**
*
* @param jobkey
* @throws SchedulerException
*/
public void triggerJob(JobKey jobkey) throws SchedulerException {
scheduler.triggerJob(jobkey);
}
/**
*
* @param jobkey
* @param jobdatamap
* @throws SchedulerException
*/
public void triggerJob(JobKey jobkey, JobDataMap jobdatamap)
throws SchedulerException {
scheduler.triggerJob(jobkey, jobdatamap);
}
/**
* 停止一个job任务
* @param jobkey
* @throws SchedulerException
*/
public void pauseJob(JobKey jobkey) throws SchedulerException {
scheduler.pauseJob(jobkey);
}
/**
* 停止多个job任务
* @param groupmatcher
* @throws SchedulerException
*/
public void pauseJobs(GroupMatcher<JobKey> groupmatcher)
throws SchedulerException {
scheduler.pauseJobs(groupmatcher);
}
/**
* 停止使用相关的触发器
* @param triggerkey
* @throws SchedulerException
*/
public void pauseTrigger(TriggerKey triggerkey)
throws SchedulerException {
scheduler.pauseTrigger(triggerkey);
}
public void pauseTriggers(GroupMatcher<TriggerKey> groupmatcher)
throws SchedulerException {
scheduler.pauseTriggers(groupmatcher);
}
/**
* 恢复相关的job任务
* @param jobkey
* @throws SchedulerException
*/
public void resumeJob(JobKey jobkey) throws SchedulerException {
scheduler.pauseJob(jobkey);
}
public void resumeJobs(GroupMatcher<JobKey> matcher)
throws SchedulerException {
scheduler.resumeJobs(matcher);
}
public void resumeTrigger(TriggerKey triggerkey)
throws SchedulerException {
scheduler.resumeTrigger(triggerkey);
}
public void resumeTriggers(GroupMatcher<TriggerKey> groupmatcher)
throws SchedulerException
{
scheduler.resumeTriggers(groupmatcher);
}
/**
* 暂停调度中所有的job任务
* @throws SchedulerException
*/
public void pauseAll() throws SchedulerException
{
scheduler.pauseAll();
}
/**
* 恢复调度中所有的job的任务
* @throws SchedulerException
*/
public void resumeAll() throws SchedulerException
{
scheduler.resumeAll();
}
}