Quartz理解與實現
阿新 • • 發佈:2019-01-23
記錄關於Quartz定時排程任務的知識點,知識點主要分為兩個部分,第一個部分介紹Quartz,第二部分使用Quartz+Spring來配置使用Quartz的實際操作。
(一)Quartz知識點
Quartz是完全由java開發的一個開源的任務日程管理系統,“任務進度管理器”就是一個在預先確定的時間到達時,負責執行(或者通知)其他元件的系統。
一句話概括:Quartz框架的核心就是排程器;
Quartz 具有以下特點:強大的排程功能,靈活的應用方式,分散式和叢集能力。
我認為企業級應用Quartz框架的原因應該主要是它的分散式和叢集能力,尤其是配合Zookeeper進行開發。
quartz排程核心元素
- Scheduler:任務排程器,是實際執行任務排程的控制器。在spring中通過SchedulerFactoryBean封裝起來。
- Trigger:觸發器,用於定義任務排程的時間規則,有SimpleTrigger,CronTrigger,DateIntervalTrigger和NthIncludedDayTrigger,其中CronTrigger用的比較多。
- JobDetail:用來描述Job實現類及其它相關的靜態資訊,如Job名字、關聯監聽器等資訊。在spring中有JobDetailFactoryBean和 MethodInvokingJobDetailFactoryBean兩種實現,如果任務排程只需要執行某個類的某個方法,就可以通過MethodInvokingJobDetailFactoryBean來呼叫。
- Job:是一個介面,只有一個方法void execute(JobExecutionContext context),開發者實現該介面定義執行任務。
(二)Quartz在Spring中的實際應用
下面給出我配置的一個定時任務,而該任務的實現可以根據具體的場景進行實現。
首先配置Spring:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--新新增的定時任務QuartzTestJob--> <bean id="quartzTestJob" class="cn.mwee.service.shop.quartz.QuartzTestJob" /> <bean id="quartzTestTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="quartzTestJob"/> <property name="targetMethod" value="execute"/> <property name="concurrent" value="false"/> </bean> <bean id="quartzTestTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="quartzTestTask"/> <!--cron表示式--> <property name="cronExpression" value="*/10 * * * * ?"/> </bean> <!-- 總管理類 --> <bean id="startQuartz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="autoStartup" value="false"/> <property name="triggers"> <list> <!--<ref bean="koubeiCueWordTrigger"/>--> <ref bean="quartzTestTrigger"/> </list> </property> </bean> </beans>
具體實現的任務類QuartzTestJob:
public class QuartzTestJob extends AbstractBaseJob{
@Override
public void work() {
logger.info("QuartzTestJob START");
logger.info("QuartzTestJob OVER");
}
}
這樣就配置好了定時任務,具體的啟動程式碼就不給出來,主要是提供一個設定Quartz排程任務的思想與方向。