使用Spring Quartz做自动任务 启动和关闭

本文详细介绍了如何在Spring Boot项目中集成Quartz,实现自动任务的创建、启动和关闭。通过配置Quartz Scheduler,结合Spring的定时任务注解,可以轻松管理后台任务。此外,还讨论了在不同场景下如何灵活控制任务的执行状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


因开发需要做一个队自动任务的开关,网上的搜索的结果都不是很满意,考虑到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();
	}
	
	
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值