Java 定時任務調度工具 Quartz(Part 1)

    Quartz是OpenSymphony提供的強大的開源任務調度(Job scheduling領域)框架,當前版本是2.2.x。Quartz能夠用來建立簡單或爲運行十個,百個,甚至是好幾萬個Jobs這樣複雜的日程序表。Jobs能夠作成標準的Java組件或 EJBs。java

官網是:www.quartz-scheduler.org   Download->latest release ->Quartz 2.2.3.tar,gz設計模式

 

特色:框架

  • 強大的調度功能(調度運行環境的持久化機制,可保存並恢復調度現場)
  • 靈活的應用方式(組件式監聽器/各類插件/線程池,多種組合方式,支持調度數據的多種存儲方式)
  • 分佈式和集羣能力

 

Quartz的設計模式:maven

  1. Bulider模式
  2. Factory模式
  3. 組件模式(可插拔)
  4. 鏈式寫法

 

Quartz的體系結構:分佈式

三個核心概念:調度器/任務/觸發器ide

                JobDetail/trigger(SimpleTrigger和CronTrigger)/scheduler工具

重要組成:ui

  • Job
  • JobDetail
  • JobBuilder
  • JobStore
  • Trigger(時間觸發規則)
  • TriggerBuilder
  • ThreadPool
  • Sheduler
  • Calendar:單Trigger能夠與多個Calendar關聯,用於排除或包含某些時間點
  • 監聽器:JobLitener/TriggerListener/SchedulerListener

 

-------------------------插件

第一個Quartz程序:線程

    1-新建Maven工程

    2-引入quartz工具包

  • pom.xml(負責維護項目所依賴的jar包的關係<dependencies>)
  • 打開mvnrepository.com->搜索quartz->2.2.3->負責dependency的內容,加到本地的pom.xml的<dependencies>中
  • maven依賴包自動更新

    3-建立HelloJob.java

public class HelloJob implements Job{

	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		//打印當前的執行時間
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		System.out.println("Current Exec Time is:"+sdf.format(date));
		
		//編寫具體的業務邏輯
		System.out.println("Hello Quartz!");
	}
}

 

4-建立HelloScheduler.java

public class HelloScheduler {
	
	public static void main(String[] args) throws SchedulerException {
			
		//建立一個JobDetail 實例,將該實例與HelloJob.class 綁定
		
		JobDetail jobDetail = JobBuilder
				.newJob(HelloJob.class)
				.withIdentity("myJob", "group1")
				.build();
	
		//建立一個Trigger實例,定義該job當即執行,並每隔兩秒鐘重複執行一次,直到永遠
		Trigger trigger = TriggerBuilder
				.newTrigger()
				.withIdentity("myTrigger", "group1")
				.startNow()
				.withSchedule(
						SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever())
				.build();
		
		//建立scheduler實例
		SchedulerFactory sfact = new StdSchedulerFactory();
		Scheduler scheduler = sfact.getScheduler();
		scheduler.start();	
		//綁定jobDetail和trigger
		scheduler.scheduleJob(jobDetail, trigger);
		
		//打印當前時間
		Date date  = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		System.out.println("Start Time is:"+sdf.format(date));
	}
}

5-運行結果:

相關文章
相關標籤/搜索