Quartz

一、導入jar包java

 二、寫一個POJO,也就是一個普通java類,方法名任意   spring

public class MyJob {

	public void send() {
		System.out.println("任務執行完成了:"+new Date());
	}
	
}

三、配置一下此POJO的bean以及調度Quartz和spring整合的bean 框架

	 <!-- 定義一個任務 -->
   <bean id="myJob" class="com.cb.job.MyJob"></bean>
   
   <!-- 定義一個MethodInvoingJobDetailFactoryBean -->
   <bean id="methodInvokingJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
       <property name="targetObject" ref="myJob"></property>
       <property name="targetMethod" value="send"></property>
   </bean>
   
   <!-- 指定時間 -->
   <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
          <property name="jobDetail" ref="methodInvokingJob"></property>
          <property name="cronExpression" value="0/1 * * * * ? *"></property>
   </bean>
   
   <!-- 指定一個總調度器 -->
   <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
      <property name="triggers">
          <list>
              <ref bean="cronTrigger"></ref>
          </list>
      </property>
   </bean>
	

配置說明: spa

一、org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean類爲指定哪一個pojo爲調度類,此類中哪一個方法須要執行,這些都經過屬性注入:blog

                <property name="targetObject" ref="myJob"></property>,targetObject爲指定哪一個bean爲調度類get

                <property name="targetMethod" value="send"></property>,爲指定此POJO中哪一個方法須要進行調度io

二、org.springframework.scheduling.quartz.CronTriggerFactoryBean配置調度執行時機,通常是經過指定表達式來決定table

               <property name="jobDetail" ref="methodInvokingJob"></property>,爲指定須要配置哪一個調度class

              <property name="cronExpression" value="0/1 * * * * ? *"></property>,爲配置調度觸發的表達式,依次是 秒 分 鍾 時 日 月 周 年 ,反正周和日兩個不能同時爲*,得有一個爲?,這個框架這麼規定的配置

三、org.springframework.scheduling.quartz.SchedulerFactoryBean類爲總的觸發調度器,其能夠配置多個調度,經過list集合注入,能夠配置多個任務

          <list>
              <ref bean="cronTrigger"></ref>
          </list>

quartz組件的難點就是在調度時間配置上,採用cron表達式,配置詳解以下:

cron表達式由7個部分構成:由年周月日時分秒這個7個單位構成,最前面是秒,依次類推,個單位之間以空格隔開,其中年爲非必須構成,其餘6個是必須的,如* 30 17 * * ?表明天天1730分觸發一次調度,其中?號只能日和周,與* 同樣表明任意

同一單位觸發兩次以逗號分割,如 * 10,20 * * * ?表明每第10分鐘和第20分鐘的時候觸發一次 ,是一個或的意思

斜槓/表明遞增,如0/5 表明從0開始,每5秒觸發一次

-表明範圍,如3-8表明345678秒觸發依次,只能3-8順序執行,不能8-3倒敘執行,跟時鐘擺針同樣,只能正着走,不能倒着走

字母L只能放在日和週上,表明最後,放在日上表明在本月的最後一天,放週上其實也就是週六,周是從週日1-週六7結束

W表明工做日,只能用在日上,若是恰好是週六日,那麼以最近的上下浮動一天到工做日,如週六的話,就提早到週五,若是週日的話,那麼順延到週一上班再觸發

若是不懂表達式的話,能夠到網上用cron在線生成器自動來生成

http://cron.qqe2.com/

相關文章
相關標籤/搜索