posts - 22, comments - 17, trackbacks - 0, articles - 15
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          spring定時器

          Posted on 2006-12-02 16:11 碼農(nóng)cz 閱讀(1921) 評論(0)  編輯  收藏 所屬分類: Spring what I know
          spring執(zhí)行定時任務(wù)
          定義一個任務(wù)是很簡單的實現(xiàn)TimerTask的run方法就可以了.
          如下:SayHelloTask.java
          1?package?test.timerTask;
          2?import?java.util.TimerTask;
          3?public?class?SayHelloTask?extends?TimerTask?{
          4???public?void?run()?{
          5?????//?TODO?Auto-generated?method?stub
          6?????System.out.println("測試TimerTask?:?Hello?!!");
          7???}
          8?}?
          9?
          然后是配置文件:
          ?1 <? xml?version="1.0"?encoding="UTF-8" ?>
          ?2 <! DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"spring-beans.dtd"? >
          ?3 < beans >
          ?4 < bean? id ="sayHelloTask" ?class ="test.timerTask.SayHelloTask" ></ bean >
          ?5 < bean? id ="scheduledTask" ?class ="org.springframework.scheduling.timer.ScheduledTimerTask" >
          ?6 < property? name ="timerTask" >
          ?7 < ref? bean ="sayHelloTask" />
          ?8 </ property >
          ?9 <!-- ?任務(wù)執(zhí)行周期?2m?關(guān)于一些任務(wù)的參數(shù)請參考JDK?doc文檔和Spring相關(guān)文檔 -->
          10 < property? name ="period" >
          11 < value > 2000 </ value >
          12 </ property >
          13 <!-- ?延時1m?執(zhí)行任務(wù)? -->
          14 < property? name ="delay" >
          15 < value > 1000 </ value >
          16 </ property >
          17 </ bean >
          18 <!-- ?啟動定時器? -->
          19 < bean? id ="timerBean" ?class ="org.springframework.scheduling.timer.TimerFactoryBean" >
          20 < property? name ="scheduledTimerTasks" >
          21 < list >
          22 < ref? bean ="scheduledTask" />
          23 </ list >
          24 </ property >
          25 </ bean >
          26 </ beans >
          27
          測試類如下:TestApp.java
          ?1 package ?test.timerTask;
          ?2 import
          ?org.springframework.context.ApplicationContext;
          ?3 import
          ?org.springframework.context.support.ClassPathXmlApplicationContext;
          ?4 public ? class ?TestApp?
          {
          ?5 ??
          /**
          ?6 ???*? @param ?args
          ?7 ??? */

          ?8 ?? public ? static ? void ?main(String[]?args)? {
          ?9 ???? // ?TODO?Auto-generated?method?stub

          10 ????ApplicationContext?context? = ? new ?ClassPathXmlApplicationContext( " test/timerTask/javaTimer.xml " );
          11 ? // ???ApplicationContext?context2?=?new?ClassPathXmlApplicationContext("test/timerTask/quartzTimer.xml");

          12 ??}

          13 // ?只要加載配置文件就可以了,
          14 }
          ?
          15
          使用Java中的定時器比較簡單,其提供的任務(wù)也比較簡單, 下面來看看使用quartz來執(zhí)行一個復(fù)雜的任務(wù).
          首先制定一個任務(wù), 實現(xiàn)QuartzJobBean中的方法.

          ?1?package?test.timerTask;
          ?2?import?org.quartz.JobExecutionContext;
          ?3?import?org.quartz.JobExecutionException;
          ?4?import?org.springframework.scheduling.quartz.QuartzJobBean;
          ?5?public?class?SayHelloTaskUsingQuartz?extends?QuartzJobBean?{
          ?6????protected?void?executeInternal(JobExecutionContext?context)
          ?7???????throws?JobExecutionException?{
          ?8?????//?TODO?Auto-generated?method?stub
          ?9?????System.out.println("使用Quartz?認(rèn)為調(diào)度:?Hello!!");
          10???}
          11?}?
          12?
          配置代碼如下:quartzTimer.xml

          ?1?<?xml?version="1.0"?encoding="UTF-8"?>
          ?2?<!DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"spring-beans.dtd"?>
          ?3?<beans>
          ?4?<bean?id="sayHelloJob"?class="org.springframework.scheduling.quartz.JobDetailBean">
          ?5?<property?name="jobClass">
          ?6?<value>test.timerTask.SayHelloTaskUsingQuartz</value>
          ?7?</property>
          ?8?</bean>
          ?9?<!--?關(guān)鍵在如下兩個觸發(fā)器的配置?-->
          10?<!--?類似于Java的簡單觸發(fā)器?-->
          11?<bean?id="helloTrigger"?class="org.springframework.scheduling.quartz.SimpleTriggerBean">
          12?<property?name="jobDetail">
          13?<ref?bean="sayHelloJob"/>
          14?</property>
          15?<property?name="startDelay">
          16?<value>1000</value>
          17?</property>
          18?<property?name="repeatInterval">
          19?<value>3000</value>
          20?</property>
          21?</bean>
          22?<!--?復(fù)雜觸發(fā)器?-->
          23?<bean?id="helloCronTrigger"?class="org.springframework.scheduling.quartz.CronTriggerBean">
          24?<property?name="jobDetail">
          25?<ref?bean="sayHelloJob"/>
          26?</property>
          27?<property?name="cronExpression">
          28?<!--?關(guān)鍵在配置此表達(dá)式?-->
          29?<value>0?49?15?*?*??</value>
          30?</property>
          31?</bean>
          32?<bean?id="scheduler"?class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
          33?<property?name="triggers">
          34?<ref?bean="helloCronTrigger"/>
          35?</property>
          36?</bean>
          37?</beans>
          38?
          關(guān)于簡單觸發(fā)器和復(fù)雜觸發(fā)器,查考下面的解釋:
          Quartz設(shè)計者做了一個設(shè)計選擇來從調(diào)度分離開作業(yè)。Quartz中的觸發(fā)器用來告訴調(diào)度程序作業(yè)什么時候觸發(fā)。框架提供了一把觸發(fā)器類型,但兩個最常用的是SimpleTrigger和CronTrigger。SimpleTrigger為需要簡單打火調(diào)度而設(shè)計。典型地,如果你需要在給定的時間和重復(fù)次數(shù)或者兩次打火之間等待的秒數(shù)打火一個作業(yè),那么SimpleTrigger適合你。另一方面,如果你有許多復(fù)雜的作業(yè)調(diào)度,那么或許需要CronTrigger。
          CronTrigger是基于Calendar-like調(diào)度的。當(dāng)你需要在除星期六和星期天外的每天上午10點半執(zhí)行作業(yè)時,那么應(yīng)該使用CronTrigger。正如它的名字所暗示的那樣,CronTrigger是基于Unix克隆表達(dá)式的。
          作為一個例子,下面的Quartz克隆表達(dá)式將在星期一到星期五的每天上午10點15分執(zhí)行一個作業(yè)。
          0 15 10 ? * MON-FRI
          下面的表達(dá)式
          0 15 10 ? * 6L 2002-2005
          將在2002年到2005年的每個月的最后一個星期五上午10點15分執(zhí)行作業(yè)。
          你不可能用SimpleTrigger來做這些事情。你可以用兩者之中的任何一個,但哪個跟合適則取決于你的調(diào)度需要。

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
          相關(guān)文章:
           
          主站蜘蛛池模板: 弥渡县| 孝义市| 东丰县| 厦门市| 星座| 梁河县| 巴东县| 天峨县| 宣武区| 上栗县| 双桥区| 天等县| 芜湖县| 鲁甸县| 花莲市| 科尔| 宣威市| 寿阳县| 偏关县| 黄骅市| 安新县| 吉隆县| 建瓯市| 阿克| 佛山市| 昔阳县| 安国市| 习水县| 双鸭山市| 白山市| 天等县| 循化| 林芝县| 泰兴市| 花垣县| 星座| 长泰县| 开封市| 卢氏县| 松潘县| 南郑县|