天涯丿陌路 2015-04-23 07:43
浏览 1778

quartz 2.2.1动态时间配置

做了一个quart测试
main:

public class QuartzMain {


    public static void main(String[] args) throws SchedulerException {
        JobDetail testJobDetail=JobBuilder
                                .newJob(TestJob.class)
                                .withIdentity("myTestJob", "myGroup")
                                .build();
        CronScheduleBuilder cronScheduleBuilder=CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
        Trigger trigger=TriggerBuilder.newTrigger()
                .withIdentity("myTrigger", "myGroup")
                .withSchedule(cronScheduleBuilder)

                .build();


        Scheduler scheduler=StdSchedulerFactory.getDefaultScheduler();
        scheduler.scheduleJob(testJobDetail, trigger);
        scheduler.start();
        System.err.println(scheduler.toString());
    }

}  

TestJob.class

public class TestJob extends BaseJob {

    private Logger logger=Logger.getLogger(TestJob.class);
    private DateFormat  formate=new SimpleDateFormat("HH:mm:ss");

    @Override
    protected void invoke(Scheduler scheduler, Trigger trigger) {
        logger.info("dateTime:==>"+formate.format(new Date()));

    }

}

BaseJob.java

public abstract class BaseJob implements Job {

    /* (non-Javadoc)
     * @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
     */
    public final void execute(JobExecutionContext context)
            throws JobExecutionException {
        //context.get
        invoke(context.getScheduler(),context.getTrigger());
        refresh(context.getScheduler(),context.getTrigger());
    }

    private void refresh(Scheduler scheduler,Trigger trigger){
        try {
            CronTriggerImpl triggerImpl=(CronTriggerImpl)trigger; 
            triggerImpl.setCronExpression("0/8 * * * * ?");
            scheduler.rescheduleJob(trigger.getKey(), triggerImpl);  

        } catch (Exception e) {
            e.printStackTrace();
        }


    }

    protected abstract void invoke(Scheduler scheduler,Trigger trigger);

}

刚开始,我是让他执行完,就重置trigger执行时间
我发现根本就不能重置trigger执行时间,反而变的更快了:
15:43:35,040 INFO TestJob:27 - dateTime:==>15:43:35
15:43:40,002 INFO TestJob:27 - dateTime:==>15:43:40
15:43:40,003 INFO TestJob:27 - dateTime:==>15:43:40
15:43:40,005 INFO TestJob:27 - dateTime:==>15:43:40
15:43:40,008 INFO TestJob:27 - dateTime:==>15:43:40
15:43:40,010 INFO TestJob:27 - dateTime:==>15:43:40
15:43:40,011 INFO TestJob:27 - dateTime:==>15:43:40
15:43:40,013 INFO TestJob:27 - dateTime:==>15:43:40
15:43:40,015 INFO TestJob:27 - dateTime:==>15:43:40
15:43:40,016 INFO TestJob:27 - dateTime:==>15:43:40
15:43:40,017 INFO TestJob:27 - dateTime:==>15:43:40
15:43:40,019 INFO TestJob:27 - dateTime:==>15:43:40
.
.
.

.

后来我这样做:把这个重置trigger时间的代码放在main方法里面可以实现:

    public static void main(String[] args) throws SchedulerException, ParseException {
        JobDetail testJobDetail=JobBuilder
                                .newJob(TestJob.class)
                                .withIdentity("myTestJob", "myGroup")
                                .build();
        CronScheduleBuilder cronScheduleBuilder=CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
        Trigger trigger=TriggerBuilder.newTrigger()
                .withIdentity("myTrigger", "myGroup")
                .withSchedule(cronScheduleBuilder)

                .build();


        Scheduler scheduler=StdSchedulerFactory.getDefaultScheduler();
        scheduler.scheduleJob(testJobDetail, trigger);
        scheduler.start();
        CronTriggerImpl triggerImpl=(CronTriggerImpl)trigger; 
        triggerImpl.setCronExpression("0/8 * * * * ?");
        scheduler.rescheduleJob(trigger.getKey(), triggerImpl);  
        System.err.println(scheduler);
    }

15:45:48,039 INFO TestJob:27 - dateTime:==>15:45:48
15:45:56,000 INFO TestJob:27 - dateTime:==>15:45:56
15:46:00,001 INFO TestJob:27 - dateTime:==>15:46:00
15:46:08,001 INFO TestJob:27 - dateTime:==>15:46:08
15:46:16,000 INFO TestJob:27 - dateTime:==>15:46:16
.
.
.
.
.如果我想执行一次重置一下执行时间,该怎么做?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 (关键词-电路设计)
    • ¥15 如何解决MIPS计算是否溢出
    • ¥15 vue中我代理了iframe,iframe却走的是路由,没有显示该显示的网站,这个该如何处理
    • ¥15 操作系统相关算法中while();的含义
    • ¥15 CNVcaller安装后无法找到文件
    • ¥15 visual studio2022中文乱码无法解决
    • ¥15 关于华为5g模块mh5000-31接线问题
    • ¥15 keil L6007U报错
    • ¥15 webapi 发布到iis后无法访问
    • ¥15 初学者如何快速上手学习stm32?