Spring的任務調度服務實例講解 {轉}

          Spring的任務調度服務實例講解
          記的以前在做一家人才招聘網站時遇到的一個問題,因為白天的流量非常大為了減輕網站的壓力所以客戶要求一些不是太急手的任務(如,給注冊用戶發送郵件、清理日常垃圾信息等等)都放在凌晨流量最小的時間段去執行,當時我們借助java.util.Timer來實現的。但是對于更加復雜的任務調度Timer就不太容易了,后來了解了Quartz(OpenSymphony的提供任務調務類庫)可以大大彌補Timer的不足可以使開發者能夠完成各種復雜的任務調度。Spring又對其提供了很好的支持使得開發者不用另外去學習這套全新的類庫就能很方便的使用。
          下面提供一個實例來講解:

          1. 首先把spring.jar包放到classpath下

          2. 編輯spring配制文件,ApplicationContext.xml內容如下:

          代碼
          						<
          						?x
          						ml
          						version
          						="
          						1.0
          						"
          						encoding
          						="
          						UTF-8
          						"
          						?>
          						
          <! DOCTYPE beans PUBLIC " -//SPRING//DTD BEAN//EN " " spring-beans.dtd " >
          < beans >
          <!—要調度的對象-->
          < bean id =" testQuarz " class =" springtimer.TestQuarz " />

          <!--定義定時執行 testQuarz 這個bean中的sayHello()方法-->
          <beanid="helloworldTask"class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
          <propertyname="targetObject">
          <refbean="testQuarz"/>
          </property>
          <property name="targetMethod">
          <value>sayHello<
          /value>
          </property>
          <
          /bean>

          <!--觸發器的 bean的設置,在這里我們設置了我們要觸發的jobDetail是哪個。這里我們定義了要觸發的jobDetail是helloworldTask,即觸發器去觸發哪個bean ..并且我們還定義了觸發的時間:每天 5 : 17 pm -->
          < bean id =" cronTrigger "
          class =" org.springframework.scheduling.quartz.CronTriggerBean ">
          < property name =" jobDetail ">
          < ref bean =" helloworldTask " />
          </ property>
          <property name="cronExpression">
          <!-- 關鍵在配置此表達式 -->
          <value>0 17 17 * * ?<
          / value >
          </ property>
          <
          / bean >

          <!--管理觸發器的總設置,管理我們的觸發器列表,可以在 bean的list中放置多個觸發器。
          -->
          < bean autowire =" no "
          class =" org.springframework.scheduling.quartz.SchedulerFactoryBean ">
          < property name =" triggers ">
          < list >
          < ref local =" cronTrigger " />
          </ list>
          <
          / property >
          </ bean>
          <
          / beans >

          3.以下是被調度的類代碼

          代碼
          						package
          						springtimer
          						;
          						

          public class TestQuarz {

          public void sayHello () {
          System . out . println (" HelloWorld! ");
          }
          }

          4,提供測試類

          代碼
          						public
          						class 
          						TestHello
          						{
          						

          public static void main ( String [] args ) {
          / / 只要加載配置文件就可以了,
          ApplicationContextcontext=newClassPathXmlApplicationContext("ApplicationContext.xml");
          System.out.println("*****完畢******");
          }

          5,Ok自已可以設置sping-config文件中<value>0 17 17 * * ?</value>的調度表達式,可以測試啦!

          6, 下面簡單的介紹一下cron expressions(調度表達式)

          格式列表:

          代碼
          						Field
          						Name
          						|
          						Mandatory
          						?
          						|
          						Allowed
          						Values
          						|
          						Allowed
          						Special
          						Characters
          						
          Seconds | YES | 0 - 59 | , - * /
          Minutes | YES | 0-59 | , - *
          /
          Hours | YES | 0 - 23 | , - * /
          Day of month | YES | 1-31 | , - * ?
          / L W C
          Month | YES | 1 - 12 or JAN - DEC | , - * /
          Day of week | YES | 1-7 or SUN-SAT | , - * ?
          / L C #
          Year | NO | empty , 1970 - 2099 | , - * /

          至于詳細的解釋你一看例子就會明白

          例子列表如下:
          表達式 解釋
          0 0 12 * * ? 在每天中午12:00觸發
          0 15 10 ? * * 每天上午10:15 觸發
          0 15 10 * * ? 每天上午10:15 觸發
          0 15 10 * * ? * 每天上午10:15 觸發
          0 15 10 * * ? 2005 在2005年中的每天上午10:15 觸發
          0 * 14 * * ? 每天在下午2:00至2:59之間每分鐘觸發一次
          0 0/5 14 * * ? 每天在下午2:00至2:59之間每5分鐘觸發一次
          0 0/5 14,18 * * ? 每天在下午2:00至2:59和6:00至6:59之間的每5分鐘觸發一次
          0 0-5 14 * * ? 每天在下午2:00至2:05之間每分鐘觸發一次
          0 10,44 14 ? 3 WED 每三月份的星期三在下午2:00和2:44時觸發
          0 15 10 ? * MON-FRI 從星期一至星期五的每天上午10:15觸發
          0 15 10 15 * ? 在每個月的每15天的上午10:15觸發
          0 15 10 L * ? 在每個月的最后一天的上午10:15觸發
          0 15 10 ? * 6L 在每個月的最后一個星期五的上午10:15觸發
          0 15 10 ? * 6L 2002-2005 在2002, 2003, 2004 and 2005年的每個月的最后一個星期五的上午10:15觸發
          0 15 10 ? * 6#3 在每個月的第三個星期五的上午10:15觸發
          0 0 12 1/5 * ? 從每月的第一天起每過5天的中午12:00時觸發
          0 11 11 11 11 ? 在每個11月11日的上午11:11時觸發.

          posted on 2006-10-11 14:53 圓月彎刀 閱讀(405) 評論(0)  編輯  收藏


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


          網站導航:
           
          <2006年10月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆檔案

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 天水市| 东阿县| 大港区| 巴青县| 莱西市| 安吉县| 崇义县| 浦城县| 保康县| 怀宁县| 城固县| 化州市| 龙江县| 合阳县| 扬州市| 成安县| 乳山市| 鄂伦春自治旗| 南岸区| 南京市| 大竹县| 新平| 深州市| 沂水县| 阳春市| 四川省| 宾川县| 甘谷县| 共和县| 深水埗区| 苏尼特左旗| 枝江市| 湖南省| 佳木斯市| 龙门县| 金寨县| 正镶白旗| 恭城| 延津县| 敦化市| 临潭县|