Spring中quartz定時器的使用

java中的定時器:
定時器:job對應於多個trigger 但是trigger 只能對應一個job。。之後schedule對應於trigger調度定時器。
閒暇時刻,看到spring的官方文檔寫了一個定時器,感覺蠻好玩的,所以記錄一下。
第一步:導包
 <dependency>
     <groupId>org.quartz-scheduler</groupId>
     <artifactId>quartz</artifactId>
     <version>2.2.1</version>
 </dependency>
 <dependency>
     <groupId>org.quartz-scheduler</groupId>
     <artifactId>quartz-jobs</artifactId>
     <version>2.2.1</version>
 </dependency>  
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context-support</artifactId>
   <version>4.3.7.release</version>
</dependency>
這三個包是必須要導入的,缺一個都不行。
導入之後需要配置xml文件:我的xml文件如下所示
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 配置job工作和實現方法的源頭-- 其中id是隨便起的,class是你在工程中的類名,value是該類中的方法名>
<bean id="quartz" class="com.psy.quartz
!.Quartz"/>
<bean id="testTaskJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="quartz"/>
    <property name="targetMethod" value="show"/>
    <property name="concurrent" value="false"/>
</bean>
<!--  
<bean id="testTaskTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
   <property name="jobDetail" ref="testTaskJob"/>
   <property name="cronExpression" value="0/5 * * * * ?"/>
</bean>-->
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
    <!-- see the example of method invoking job above -->
    <property name="jobDetail" ref="testTaskJob"/>
    <!-- 10 seconds -->
    <property name="startDelay" value="10000"/>
    <!-- repeat every 50 seconds -->
    <property name="repeatInterval" value="3000"/>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="simpleTrigger"/>
        </list>
    </property>
</bean>
</beans>
基本步驟:先定義一個job----在根據job定義一個tigger----在定義一個schedule進行調度。其中的ref爲上一級的id,上文中已經用相同顏色的字體表表明(定時器:job對應於多個trigger 但是trigger 只能對應一個job。。之後schedule對應於trigger調度定時器。
下圖爲我創建的定時任務,與上文中的:<bean id="quartz" class="com.psy.quartz!.Quartz"/>

測試的結果如下圖控制檯輸出的信息:

那麼怎麼啓動呢?很明顯這是有spring管理的,所以當你啓動web項目的時候就應該啓動,我把這個xml文件導入到sping-config.xml中了

所以當容器一啓動加載web.xml的時候便可以納入spring的管理項目,當然不止這一招,你還可以使用webapplication啓動。或者說是加載xml文件,具體的仁者見仁了。
需要說明的是,可以定義多個定時器,配置的方法和單個的定時器是沒什麼差別的,但是要記住上文紅色文字所說明的。多個定時器要配置多個job,可以只配置一個tigger,但是一個tigge只可以對應一個job。下圖爲schedule配置多個trigger。


spring的參考文檔:http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/scheduling.html#scheduling-quartz

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章