Quartz動態改變任務時間

基於quartz-2.2 的動態任務調度

Quartz是一個完全由java編寫的開源作業調度框架。

調度器

Quartz框架的核心是調度器。調度器負責管理Quartz應用運行時環境。調度器不是靠自己做所有的工作,而是依賴框架內一些非常重要的部件。Quartz不僅僅是線程和線程管理。為確保可伸縮性,Quartz採用了基於多線程的架構。啟動時,框架初始化一套worker線程,這套線程被調度器用來執行預定的作業。這就是Quartz怎樣能併發運行多個作業的原理。Quartz依賴一套松耦合的線程池管理部件來管理線程環境。

今天測試了下基於quartz-2.2動態改變調度時間

<code> /<code>

POJO執行任務類

<code>public class Producer { public void executeListener() { System.out.println("執行任務 ,當前執行時間 :: " + (new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(new Date())); } }/<code>

隨機一個數,測試執行的時間

<code>@Controller @RequestMapping("/") public class ScheduleInfoAction { @Autowired org.springframework.scheduling.quartz.SchedulerFactoryBean myScheduler; @Autowired org.springframework.scheduling.quartz.SimpleTriggerFactoryBean oldTrigger; @RequestMapping(value="/rereshSheduleTrigger",method=RequestMethod.GET) public void retScheduleJob() throws SchedulerException, ParseException { TriggerBuilder tb = oldTrigger.getObject().getTriggerBuilder(); int number = new Random().nextInt(10) + 1; System.out.println("動態改變執行時間為"+number+"秒"); Trigger newTrigger = tb.withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(number)).build(); //Trigger trigger = tb.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build(); myScheduler.getObject().rescheduleJob(oldTrigger.getObject().getKey(), newTrigger); } }/<code>

測試圖如下,默認是5秒鐘執行一次,加了個隨機數讓任務隨機執行。這裡我用了SimpleScheduleBuilder。也可以用CronScheduleBuilder 這樣就可以用cron表達式來實現。