paulwong

          Spring 3.0的任務調度

          Spring3.0以后,自己已經完全支持更加精確的時間,而不需要Quartz(Quartz是一個開放源碼項目,專注于任務調度器,提供了極為廣泛的特性如持久化任務,集群和分布式任務等。Spring對Quartz的集成與其對JDK Timer的集成在任務、觸發(fā)器和調度計劃的聲明式配置方面等都非常相似。 )的支持:當然后面我們也會用Quartz實現任務的調度。

          Spring3.0同樣也使用cron表達式。與Quartz不同的是,Spring3.0不支持年,而Quartz支持年。但這點好象并不是非常重要。

          cron表達式:-是用空格分開的時間字段,不使用年。
          *(秒0-59)    
          *(分鐘0-
          59)  
          *(小時0-
          23)  
          *(日期1-
          31)  
          *(月份1-12或是JAN-DEC)  
          *(星期1-7或是SUN-SAT)  

          示例: 
          */
          5  * * * * 6-7  :: 每個周6到周日,每隔5秒鐘執(zhí)行一次。
           
          */
          1 * * 7-9 1-2 1-7 :: 1月到2月中的7號到9號,且必須要滿足周一到周日,每隔1秒鐘執(zhí)行一次。 

          */
          1 * * 7-9 1,5 1-7  :: 注意里面的,(逗號),只有1月和5月的7到9號,且必須要滿足周一到周日,每一秒鐘執(zhí)行一次。 

          */
          1 17-59 * 7-9 1,5 1-7 :: 只解釋17-59,是指從第17分鐘到第59分鐘,在指定的時間內,每一秒種執(zhí)行一次 

          17-59 * 7-9 1,5 1-7  :: 此代碼的功能與上面完全相同。如果不寫秒即為每一秒執(zhí)行一次。 

            59
           19-23 * 7-9 1,5 1-7  :: 19分-23分的每59秒鐘時只執(zhí)行一次。 

            59 19,26 * 7-9 1,5 1-7  :: 注意里面的,(逗號),是指只有19分或是26分的56秒鐘時執(zhí)行一次。 

            * * 
          16-23 7-9 1,5 1-7  :: 定義每天的16點到23點每一秒鐘執(zhí)行一次。 

            59 59 23 * * 1-5  :: 定義每周1到周5,晚上23:59:59秒只執(zhí)行一次。
          這個相當用有??梢怨ぷ鲿r間每天給用戶發(fā)郵件。 

          在Spring3.0中引用了新的命名空間-task:
          task:scheduler 用于定義一個ThreadPoolTaskScheduler,并可以指定線程池的大小,
          即pool-size.所有任務隊列都將會在指定大小的線程池中運行:

          定義如下:
          <!-- 對于同一個Pojo可以聲明多次,并設置標記屬性 -->  
          <bean id="one" class="cn.itcast.schedule.One">  
          <property name="task" value="A"></property>  
          </bean>  

          <bean id="two" class="cn.itcast.schedule.One">  
          <property name="task" value="B"></property>  
          </bean>  

          <bean id="three" class="cn.itcast.schedule.One">  
          <property name="task" value="C"></property>  
          </bean>  

          <!-- 聲明一個具有兩個線程的池,每一個對象將獲取同樣的運行機會 -->  
          <task:scheduler id="sch" pool-size="2"/>  

          <!-- 引用線程池 -->  
          <task:scheduled-tasks scheduler="sch">  
              
          <!-- 引用Spring Bean并設置調用的方法的時間間隔 --> 
              
          <task:scheduled ref="one" method="doSomeThing"  fixed-delay="#{1000*3}"/> 
                 <task:scheduled ref="two" method="doSomeThing"  fixed-delay="#{1000*3}"/> 
                 <task:scheduled ref="three" method="doSomeThing"  fixed-delay="#{1000*3}"/> 
            </task:scheduled-tasks> 

          <!-- 配置一個定時執(zhí)行的任務 --> 
          <bean id="work" class="cn.itcast.schedule.Two"/> 

          <task:scheduler id="sendMail"/> 

          <task:scheduled-tasks scheduler="sendMail"> 
              
          <!-- 定義在1月8號19:37:1秒執(zhí)行一次,無論是周幾 --> 
              
          <task:scheduled ref="work" method="work" cron="1 37 19 8 1 *"/> 
          </task:scheduled-tasks> 


          定義好之后,正常啟動容器即可,只有條件符合,即會按要求執(zhí)行任務。

          posted on 2012-10-12 10:51 paulwong 閱讀(4276) 評論(0)  編輯  收藏 所屬分類: SRPING BATCH

          主站蜘蛛池模板: 同江市| 紫云| 定州市| 贺州市| 平顺县| 普定县| 沈丘县| 佛坪县| 达尔| 砀山县| 石首市| 茂名市| 郧西县| 瑞昌市| 铁力市| 临洮县| 库车县| 宜良县| 竹溪县| 瓦房店市| 大名县| 福贡县| 项城市| 湾仔区| 商河县| 永平县| 三门县| 曲松县| 庄河市| 防城港市| 邯郸市| 英吉沙县| 建德市| 岳阳市| 武隆县| 会宁县| 巴彦淖尔市| 沾益县| 乐业县| 凤阳县| 邵武市|