Spring 3.x 使用 Quartz Scheduler

使用的spring的版本為3.1.1,quartz的版本為1.8.6(可以去http://quartz-scheduler.org下載)瓷患,本來是用最新版2.1.6的,不過由于該版本與spring不兼容。
后來發(fā)現(xiàn):org.springframework.scheduling.quartz.CronTriggerBean繼承了org.quartz.CronTrigger霹琼,而在quartz-2.1.6中org.quartz.CronTrigger是個接口圈膏,而在quartz-1.8.6中org.quartz.CronTrigger是個類倔矾,從而造成無法在applicationContext中配置觸發(fā)器驼抹。這是spring3和quartz2版本不兼容的一個bug。
按照Spring Reference Documentation 里的說法竟坛,實現(xiàn)Quartz Scheduler有兩種方法:

第一種

使用JobDetailBean闽巩,任務(wù)類繼承QuartzJobBean類。

public class ExampleJob extends QuartzJobBean {
  private int timeout;
  
  /**
   * Setter called after the ExampleJob is instantiated
   * with the value from the JobDetailBean (5)
   */ 
  public void setTimeout(int timeout) {
    this.timeout = timeout;
  }
  
  protected void executeInternal(JobExecutionContext ctx) throws JobExecutionException {
      // do the actual work
  }
}

在applicationContext.xml中加入

<bean name="exampleJob" class="org.springframework.scheduling.quartz.JobDetailBean">
  <property name="jobClass" value="example.ExampleJob" />
  <property name="jobDataAsMap">
    <map>
      <entry key="timeout" value="5" />
    </map>
  </property>
</bean>

第二種

在配置文件里定義任務(wù)類和要執(zhí)行的方法流码,類和方法仍然是普通類又官。明顯這種比第一種更加的靈活。
以下代碼為任務(wù)類:

public class ExampleBusinessObject {
  
  // properties and collaborators
  public void doIt() {
    // do the actual work
  }
}

在applicationContext.xml中加入

<bean id="exampleBusinessObject" class="examples.ExampleBusinessObject"/>

<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  <property name="targetObject" ref="exampleBusinessObject" />
  <property name="targetMethod" value="doIt" />
  <property name="concurrent" value="false" />
</bean>

要注意的是MethodInvokingJobDetailFactoryBean類默認(rèn)是并發(fā)執(zhí)行的漫试,這時候如果不設(shè)置“concurrent”為false六敬,很可能帶來并發(fā)或者死鎖的問題,而且?guī)茁瘦^小驾荣,不容易復(fù)現(xiàn)外构,請大家使用的時候注意設(shè)置“concurrent”。
以上兩種方法播掷,用任意一種都行审编。配置好任務(wù)類,就要開始執(zhí)行它了歧匈。那就需要用到Trigger了垒酬,Trigger有兩種:
第一種 SimpleTriggerBean 這種只能設(shè)置每隔多少秒執(zhí)行一次任務(wù)。在applicationContext.xml中加入

<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
    <!-- see the example of method invoking job above -->
    <property name="jobDetail" ref="jobDetail" />
    <!-- 10 seconds -->
    <property name="startDelay" value="10000" />
    <!-- repeat every 50 seconds -->
    <property name="repeatInterval" value="50000" />
</bean>

第二種 CronTriggerBean 這種比較靈活 可以設(shè)置某個時刻執(zhí)行,也可以設(shè)置間隔時間執(zhí)行勘究。在applicationContext.xml中加入

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
     <property name="jobDetail" ref="exampleJob" />
     <!-- run every morning at 6 AM -->
     <property name="cronExpression" value="0 0 6 * * ?" />
</bean>

下面簡要說明一下Cron表達(dá)式
cronExpression 中的value 有至少6個(也可能7個)有空格分隔的時間元素矮湘,從左到右分別代表

  1. 秒(0-59)
  2. 分(0-59)
  3. 小時(0-23)
  4. 月份中的日期(1-31)
  5. 月份(1-12或JAN-DEC)
  6. 星期中的日期(1-7或SUN-SAT)
  7. 年份(1970-2099)

星號(*):可用在所有字段中,表示對應(yīng)時間域的每一個時刻口糕,例如缅阳,*在分鐘字段時,表示“每分鐘”景描;
問號(?):該字符只在日期和星期字段中使用十办,它通常指定為“無意義的值”,相當(dāng)于點位符超棺;
減號(-):表達(dá)一個范圍向族,如在小時字段中使用10-12,則表示從10到12點说搅,即10,11,12炸枣;
逗號(,):表達(dá)一個列表值,如在星期字段中使用MON,WED,FRI弄唧,則表示星期一,星期三和星期五霍衫;
斜杠(/):x/y表達(dá)一個等步長序列候引,x為起始值,y為增量步長值敦跌。如在分鐘字段中使用0/15澄干,則表示為0,15,30和45秒,而5/15在分鐘字段中表示5,20,35,50柠傍,你也可以使用*/y麸俘,它等同于0/y
最后,加入Trigger之后惧笛,需要SchedulerFactoryBean來生產(chǎn)Trigger从媚。在applicationContext.xml中加入

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="cronTrigger" />
            <ref bean="simpleTrigger" />
        </list>
    </property>
</bean>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市患整,隨后出現(xiàn)的幾起案子拜效,更是在濱河造成了極大的恐慌,老刑警劉巖各谚,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件紧憾,死亡現(xiàn)場離奇詭異,居然都是意外死亡昌渤,警方通過查閱死者的電腦和手機赴穗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人般眉,你說我怎么就攤上這事了赵。” “怎么了煤篙?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵斟览,是天一觀的道長。 經(jīng)常有香客問我辑奈,道長苛茂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任鸠窗,我火速辦了婚禮妓羊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘稍计。我一直安慰自己躁绸,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布臣嚣。 她就那樣靜靜地躺著净刮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪硅则。 梳的紋絲不亂的頭發(fā)上淹父,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音怎虫,去河邊找鬼暑认。 笑死,一個胖子當(dāng)著我的面吹牛大审,可吹牛的內(nèi)容都是我干的蘸际。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼徒扶,長吁一口氣:“原來是場噩夢啊……” “哼粮彤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起酷愧,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤驾诈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后溶浴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乍迄,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年士败,在試婚紗的時候發(fā)現(xiàn)自己被綠了闯两。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片褥伴。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖漾狼,靈堂內(nèi)的尸體忽然破棺而出重慢,到底是詐尸還是另有隱情逊躁,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布稽煤,位于F島的核電站,受9級特大地震影響酵熙,放射性物質(zhì)發(fā)生泄漏轧简。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一匾二、第九天 我趴在偏房一處隱蔽的房頂上張望哮独。 院中可真熱鬧,春花似錦察藐、人聲如沸皮璧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至浸须,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間邦泄,已是汗流浹背删窒。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留顺囊,地道東北人肌索。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像特碳,于是被迫代替她去往敵國和親诚亚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理午乓,服務(wù)發(fā)現(xiàn)站宗,斷路器,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,811評論 6 342
  • Quartz 中集群如何工作 一個 Quartz 集群中的每個節(jié)點是一個獨立的 Quartz 應(yīng)用益愈,它又管理著其他...
    那臉憔悴閱讀 2,751評論 1 52
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法梢灭,類相關(guān)的語法夷家,內(nèi)部類的語法,繼承相關(guān)的語法敏释,異常的語法库快,線程的語...
    子非魚_t_閱讀 31,631評論 18 399
  • 拖著滿身疲倦的身體,終于等來了下班的時刻钥顽∫迤粒回家的路途需要兩個半小時,但我并不認(rèn)為回程距離太過遙遠(yuǎn)蜂大,這反而是一種回歸...
    光陰沒有名字閱讀 648評論 0 0