Quartz 是一個徹底由Java 編寫的開源任務調度的框架,經過觸發器設置做業定時運行規 則,控制做業的運行時間。Quartz 定時器做用不少,好比,定時發送信息和定時生成報表等。 Quartz 框架主要核心組件包括調度器、觸發器和做業。調度器做爲做業的總指揮,觸發器 做爲做業的操做者,做業爲應用的功能模塊。其關係如圖java
Job 是一個接口,該接口只有一個方法execute ,被調度的做業(類)需實現該接口中execute() 方法, JobExecutionContext 類提供了調度上下文的各類信息。每次執行該Job 均從新建立一個 Job 實例。架構
Quartz 在每次執行Job 時,都從新建立一個Job 實例,因此它不直接接受一個Job 的實例, 相反它接收一個Job 實現類,以便運行時經過newlnstance()的反射機制實例化Job 。所以須要通 過一個類來描述Job 的實現類及其餘相關的靜態信息,如Job 名字、描述、關聯監聽器等信息, JobDetail 承擔了這一角色。JobDetail 用來保存做業的詳細信息。一個JobDetail 能夠有多個 Trigger,可是一個Trigger 只能對應一個JobDetai l Trigger 觸發器描述觸發Job 的執行規則。主要有SimpleTrigger 和CronTrigger 這兩個子 類。當僅需觸發一次或者以固定時間間隔週期執行時, S impleTrigger 是最適合的選擇;而 CronTrigger 則能夠經過Cron 表達式定義出各類複雜時間規則的調度方案:如每早晨9:00 執 行, 周1、周3、週五下午5:00 執行等。Cron 表達式定義以下:框架
Scheduler 負責管理Quartz 的運行環境, Quartz 是基於多錢程架構的,它啓動的時候會初始 化一套線程, 這套線程會用來執行一些預置的做業。Trigger 和JobDetail 能夠註冊到Scheduler 中, Scheduler 能夠將Tri gger 綁定到某一JobDetail 中, 這樣當Trigger 觸發時,對應的Job 就被 執行。Scheduler 擁有一個SchedulerContext,它相似於ServletContext , 保存着Scheduler上下文spa
信息, Job 和Trigger 均可以訪問SchedulerContext 內的信息。Scheduler 使用一個線程池做爲任 務運行的基礎設施,任務經過共享線程池中的線程提升運行效率。 瞭解完Quartz 定時器的基本原理後, 在src\main\java\com\ay\job 目錄下建立定時器類 PraiseDataSaveDBJob .java,具體代碼以下(點贊例子):線程
• @Configurable :加上此註解的類至關於XML配直文件,能夠被Spring掃描初始化。 • @EnableScheduling : 經過在本身直類註解@EnableScheduling來開啓對計劃任務的支 持,而後在要執行計劃任務的方法上註解@Schedul ed ,聲明這是一個計劃任務。 • @Scheduled :註解爲定時任務,cron表達式裏寫執行的時機。blog
接口