1.实现一个管理类 ,对计时的程序进行管理

import java.text.ParseException;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;

/**
 * 定时任务管理类
 */
public class QuartzManager {
	//SchedulerFactory 是创建定时任务的工厂
    private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory();
    private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME";//默认的任务组
    private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME";//默认计时器组

    /**
     * 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
     *
     * @param jobName	任务名
     * @param jobClass	任务
     * @param time		时间设置,参考quartz说明文档
     * @throws SchedulerException
     * @throws ParseException
     */
    public static void addJob(String jobName, String jobClass, String time) {
        try {
        	//获取一个Scheduler
            Scheduler sched = gSchedulerFactory.getScheduler();
            //创建一个任务  JobDetail
            /**
             * 参数1  任务名称 
             * 参数2  任务组名
             * 参数3  任务执行的类
             */
            JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, Class.forName(jobClass));// 任务名,任务组,任务执行类
            // 触发器 CronTrigger
            /**
             * 参数1 任务名称  
             * 参数2 触发器组名
             */
            CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);// 触发器名,触发器组
            trigger.setCronExpression(time);// 触发器时间设定
            //将 任务  和触发器 装进Scheduler
            sched.scheduleJob(jobDetail, trigger);
            // 启动
            if (!sched.isShutdown()){
                sched.start();
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    /**
     * 添加一个定时任务
     *
     * @param jobName			任务名
     * @param jobGroupName		任务组名
     * @param triggerName		触发器名
     * @param triggerGroupName	触发器组名
     * @param jobClass			任务
     * @param time				时间设置,参考quartz说明文档
     * @throws SchedulerException
     * @throws ParseException
     */
    public static void addJob(String jobName, String jobGroupName,
            String triggerName, String triggerGroupName, String jobClass, String time){
        try {
            Scheduler sched = gSchedulerFactory.getScheduler();
            JobDetail jobDetail = new JobDetail(jobName, jobGroupName, Class.forName(jobClass));// 任务名,任务组,任务执行类
            // 触发器
            CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);// 触发器名,触发器组
            trigger.setCronExpression(time);// 触发器时间设定
            sched.scheduleJob(jobDetail, trigger);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    /**
     * 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)
     *
     * @param jobName
     * @param time
     */
    @SuppressWarnings("unchecked")
	public static void modifyJobTime(String jobName, String time) {
        try {
            Scheduler sched = gSchedulerFactory.getScheduler();
            CronTrigger trigger = (CronTrigger) sched.getTrigger(jobName, TRIGGER_GROUP_NAME);
            if(trigger == null) {
                return;
            }
            String oldTime = trigger.getCronExpression();
            if (!oldTime.equalsIgnoreCase(time)) {
                JobDetail jobDetail = sched.getJobDetail(jobName, JOB_GROUP_NAME);
                Class objJobClass = jobDetail.getJobClass();
                String jobClass = objJobClass.getName();
                removeJob(jobName);

                addJob(jobName, jobClass, time);
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    /**
     * 修改一个任务的触发时间
     *
     * @param triggerName
     * @param triggerGroupName
     * @param time
     */
    public static void modifyJobTime(String triggerName,
            String triggerGroupName, String time) {
        try {
            Scheduler sched = gSchedulerFactory.getScheduler();
            CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerName, triggerGroupName);
            if(trigger == null) {
                return;
            }
            String oldTime = trigger.getCronExpression();
            if (!oldTime.equalsIgnoreCase(time)) {
                CronTrigger ct = (CronTrigger) trigger;
                // 修改时间
                ct.setCronExpression(time);
                // 重启触发器
                sched.resumeTrigger(triggerName, triggerGroupName);
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    /**
     * 移除一个任务(使用默认的任务组名,触发器名,触发器组名)
     *
     * @param jobName
     */
    public static void removeJob(String jobName) {
        try {
            Scheduler sched = gSchedulerFactory.getScheduler();
            sched.pauseTrigger(jobName, TRIGGER_GROUP_NAME);// 停止触发器
            sched.unscheduleJob(jobName, TRIGGER_GROUP_NAME);// 移除触发器
            sched.deleteJob(jobName, JOB_GROUP_NAME);// 删除任务
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    /**
     * 移除一个任务
     *
     * @param jobName
     * @param jobGroupName
     * @param triggerName
     * @param triggerGroupName
     */
    public static void removeJob(String jobName, String jobGroupName,
            String triggerName, String triggerGroupName) {
        try {
            Scheduler sched = gSchedulerFactory.getScheduler();
            sched.pauseTrigger(triggerName, triggerGroupName);// 停止触发器
            sched.unscheduleJob(triggerName, triggerGroupName);// 移除触发器
            sched.deleteJob(jobName, jobGroupName);// 删除任务
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    /**
     * 启动所有定时任务
     */
    public static void startJobs() {
        try {
            Scheduler sched = gSchedulerFactory.getScheduler();
            sched.start();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    /**
     * 关闭所有定时任务
     */
    public static void shutdownJobs() {
        try {
            Scheduler sched = gSchedulerFactory.getScheduler();
            if(!sched.isShutdown()) {
                sched.shutdown();
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
}
2.供定时程序调用的接口

import org.quartz.Job;

/**
 * 
 * 供需要定时的程序调用
 */
public interface InitiativeCollector extends Job {
		
	/**
	 * 获得Job定时时间
	 * ----------------------------
	 * 【位置说明】:
	 * 	1 - 秒(0–59)
	 * 	2 - 分(0–59)
	 *	3 - 时(0–23)
	 *	4 - 日(1–31)
	 *	5 - 月(1–12)
	 * 	6 - 星期(SUN–SAT or 1–7)
	 *  7 - 年(可选, 1970–2099)
	 *  --------------------------------
	 *  【符号说明】
	 *  0 0 12 * * ?---------------在每天中午12:00触发 
	 *	0 15 10 ? * *---------------每天上午10:15 触发 
	 *  0 15 10 * * ?---------------每天上午10:15 触发 
	 *	0 15 10 * * ? *---------------每天上午10:15 触发 
	 *	0 15 10 * * ? 2005---------------在2005年中的每天上午10:15 触发 
	 *	0 * 14 * * ?---------------每天在下午2:00至2:59之间每分钟触发一次 
	 *	0 0/5 14 * * ?---------------每天在下午2:00至2:59之间每5分钟触发一次 
	 *	0 0/5 14,18 * * ?---------------每天在下午2:00至2:59和6:00至6:59之间的每5分钟触发一次 
	 *	0 0-5 14 * * ?---------------每天在下午2:00至2:05之间每分钟触发一次 
	 *	0 10,44 14 ? 3 WED---------------每三月份的星期三在下午2:00和2:44时触发 
	 *	0 15 10 ? * MON-FRI---------------从星期一至星期五的每天上午10:15触发 
	 *	0 15 10 15 * ?---------------在每个月的每15天的上午10:15触发 
	 *	0 15 10 L * ?---------------在每个月的最后一天的上午10:15触发 
	 *	0 15 10 ? * 6L---------------在每个月的最后一个星期五的上午10:15触发 
	 *	0 15 10 ? * 6L 2002-2005---------------在2002, 2003, 2004 and 2005年的每个月的最后一个星期五的上午10:15触发 
	 *	0 15 10 ? * 6#3---------------在每个月的第三个星期五的上午10:15触发 
	 *	0 0 12 1/5 * ?---------------从每月的第一天起每过5天的中午12:00时触发 
	 *	0 11 11 11 11 ?---------------在每个11月11日的上午11:11时触发
	 * @return
	 */
	String getTimer();

}
3.需要调用时只需要实现接口传入所需启动的时间即可 和复写Job中的execute()方法执行所需的操作 。
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class Collector implements InitiativeCollector {

	@Override
	public String getTimer() {
		//每周日的晚上23:30转上周的周统计数据
		return "0 30 23 ? * SUN";
	}

	@Override
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		// 执行操作
	}	
	

}
4.调用addJob
void addJob(String name,InitiativeCollector collector){
		QuartzManager.addJob(name, collector.getClass().getName(), collector.getTimer());
}



更多相关文章

  1. 如果服务器位于不同的位置,如何保存客户端机器时间
  2. java时间转换,long , string和date和时间戳的互转
  3. Java时区转换与时间格式

随机推荐

  1. PDA调用接口 提示:客户端发现响应内容的类
  2. 输入焦点警报,没有类别或ID,在Div内
  3. HTML5做的web网页可以直接做成手机APP么?
  4. 使用xpath查找包含特定内容的span
  5. Jquery在两个元素之间更改文本
  6. 通过PHP隐藏SQL中的索引值
  7. 纯JS幻灯片菜单,能够“点击菜单外点击”
  8. 为什么我的DIV小于其内容?
  9. 高分求:如何解析IdHTTP获得的http代码?用ms
  10. 用无序列表键入文本脚本