Quartz使用 在程序中启停定时器

来源:互联网 发布:成捷迅概预算软件价格 编辑:程序博客网 时间:2024/06/06 00:30

转自:http://www.blogjava.net/fatbear/archive/2008/10/08/233158.html 

新需求:用程序实现定时器的停、起。下面有个例子


但是在我的项目中Quartz版本是用maven下的新版本,发现先前的例子中的方法不能直接用了,下面是之后有做的修改的:

如果用的quartz版本是2.2.X 最新的需要做如下修改:

因为新版本把好多类变成了接口,不能直接实例化,需要借助其他的类来实例化;如下:

@Controller@RequestMapping(value = "/etos2/bss")public class BillJobStart {@RequestMapping(value = "/billJobStart")public void jobStart() {addJob(BillJobConstant.JOB_NAME,"0/2 * * * * ?");}public static void addJob(String jobName,String time){ try {Scheduler sched = BillJobConstant.sf.getScheduler();JobDetail jobDetail = JobBuilder.newJob(JobT.class).withIdentity(jobName, BillJobConstant.JOB_GROUP_NAME).build();CronExpression cronExpression =new CronExpression(time);CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(BillJobConstant.TRIGGER_GROUP_NAME).withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)).build();sched.scheduleJob(jobDetail,trigger); //启动 if(!sched.isShutdown())    sched.start();} catch (SchedulerException e) {e.printStackTrace();} catch (ParseException e) {e.printStackTrace();} }public static void modifyTime(String time){try {Scheduler sched =  BillJobConstant.sf.getScheduler();TriggerKey key = new TriggerKey( BillJobConstant.TRIGGER_GROUP_NAME);CronExpression cronExpression =new CronExpression(time);Trigger trigger = sched.getTrigger(key);CronTrigger cron = (CronTrigger)trigger;cron.getTriggerBuilder().withIdentity(BillJobConstant.TRIGGER_GROUP_NAME).withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)).build();sched.resumeTrigger(key);} catch (SchedulerException e) {e.printStackTrace();} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void stopJob()throws SchedulerException, ParseException{ Scheduler sched =  BillJobConstant.sf.getScheduler();TriggerKey key = new TriggerKey( BillJobConstant.TRIGGER_GROUP_NAME);sched.pauseTrigger(key);//停止触发器} public static void main(String[] args) {try {addJob(BillJobConstant.JOB_NAME,"0/5 * * * * ?");Thread.sleep(10000); stopJob();Thread.sleep(10000); modifyTime("0/1 * * * * ?");} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SchedulerException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}





package wf.job;import java.text.ParseException;import org.quartz.CronTrigger;import org.quartz.Job;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.SchedulerFactory;import org.quartz.Trigger;import org.quartz.impl.StdSchedulerFactory;public class QuartzManager {private static SchedulerFactory sf = new StdSchedulerFactory();    private static String JOB_GROUP_NAME = "group1";    private static String TRIGGER_GROUP_NAME = "trigger1";         /** *//**     *  添加一个定时任务,使用默认的任务组名,触发器名,触发器组名     * @param jobName 任务名     * @param job     任务     * @param time    时间设置,参考quartz说明文档     * @throws SchedulerException     * @throws ParseException     */    public static void addJob(String jobName,Job job,String time)                                throws SchedulerException, ParseException{        Scheduler sched = sf.getScheduler();        JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, job.getClass());//任务名,任务组,任务执行类        //触发器        CronTrigger  trigger =             new CronTrigger(jobName, TRIGGER_GROUP_NAME);//触发器名,触发器组        trigger.setCronExpression(time);//触发器时间设定        sched.scheduleJob(jobDetail,trigger);        //启动        if(!sched.isShutdown())           sched.start();    }       /** *//**     * 添加一个定时任务     * @param jobName 任务名     * @param jobGroupName 任务组名     * @param triggerName  触发器名     * @param triggerGroupName 触发器组名     * @param job     任务     * @param time    时间设置,参考quartz说明文档     * @throws SchedulerException     * @throws ParseException     */    public static void addJob(String jobName,String jobGroupName,                              String triggerName,String triggerGroupName,                              Job job,String time)                                throws SchedulerException, ParseException{        Scheduler sched = sf.getScheduler();        JobDetail jobDetail = new JobDetail(jobName, jobGroupName, job.getClass());//任务名,任务组,任务执行类        //触发器        CronTrigger  trigger =             new CronTrigger(triggerName, triggerGroupName);//触发器名,触发器组        trigger.setCronExpression(time);//触发器时间设定        sched.scheduleJob(jobDetail,trigger);        if(!sched.isShutdown())           sched.start();    }       /** *//**     * 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)     * @param jobName     * @param time     * @throws SchedulerException     * @throws ParseException     */    public static void modifyJobTime(String jobName,String time)                                   throws SchedulerException, ParseException{        Scheduler sched = sf.getScheduler();        Trigger trigger =  sched.getTrigger(jobName,TRIGGER_GROUP_NAME);        if(trigger != null){            CronTrigger  ct = (CronTrigger)trigger;            ct.setCronExpression(time);            sched.resumeTrigger(jobName,TRIGGER_GROUP_NAME);        }    }       /** *//**     * 修改一个任务的触发时间     * @param triggerName     * @param triggerGroupName     * @param time     * @throws SchedulerException     * @throws ParseException     */    public static void modifyJobTime(String triggerName,String triggerGroupName,                                     String time)                                   throws SchedulerException, ParseException{        Scheduler sched = sf.getScheduler();        Trigger trigger =  sched.getTrigger(triggerName,triggerGroupName);        if(trigger != null){            CronTrigger  ct = (CronTrigger)trigger;            //修改时间            ct.setCronExpression(time);            //重启触发器            sched.resumeTrigger(triggerName,triggerGroupName);        }    }       /** *//**     * 移除一个任务(使用默认的任务组名,触发器名,触发器组名)     * @param jobName     * @throws SchedulerException     */    public static void removeJob(String jobName)                                throws SchedulerException{        Scheduler sched = sf.getScheduler();        sched.pauseTrigger(jobName,TRIGGER_GROUP_NAME);//停止触发器        sched.unscheduleJob(jobName,TRIGGER_GROUP_NAME);//移除触发器        sched.deleteJob(jobName,JOB_GROUP_NAME);//删除任务    }       /** *//**     * 移除一个任务     * @param jobName     * @param jobGroupName     * @param triggerName     * @param triggerGroupName     * @throws SchedulerException     */    public static void removeJob(String jobName,String jobGroupName,                                 String triggerName,String triggerGroupName)                                throws SchedulerException{        Scheduler sched = sf.getScheduler();        sched.pauseTrigger(triggerName,triggerGroupName);//停止触发器        sched.unscheduleJob(triggerName,triggerGroupName);//移除触发器        sched.deleteJob(jobName,jobGroupName);//删除任务    } }


下面是调用的类:

public class QuartzTest {/** *//**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        TestJob job = new TestJob();        String job_name ="11";        try {            System.out.println("【系统启动】");            QuartzManager.addJob(job_name,job,"0/5 * * * * ?");                        Thread.sleep(10000);            System.out.println("【修改时间】");            QuartzManager.modifyJobTime(job_name,"0/10 * * * * ?");            Thread.sleep(20000);            System.out.println("【移除定时】");            QuartzManager.removeJob(job_name);            Thread.sleep(10000);                        System.out.println("/n 【添加定时任务】");            QuartzManager.addJob(job_name,job,"0/5 * * * * ?");                    }  catch (Exception e) {            e.printStackTrace();        }    }}
public class TestJob implements Job{@Overridepublic void execute(JobExecutionContext arg0) throws JobExecutionException {// TODO Auto-generated method stubSystem.out.println("★★★★★★★★★★★");}}



0 0
原创粉丝点击