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表達式來實現。

Quartz動態改變任務時間


分享到:


相關文章: