2012-12-21 52 views
2

我使用兩個石英調度器創建了一個Spring應用程序,第一個觸發器有3個觸發器,第二個觸發器有一個觸發器。在一個Spring上下文中使用兩個調度器

所有這些觸發器都設置爲併發操作false。

當我運行這個,似乎只有在第二個調度程序的作業觸發器得到 發射。 triggerJobB也需要很少的時間來執行。

我的問題是,在一個彈簧環境中使用兩個調度器會導致執行問題,並且這是否是一種好的做法。

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
     <property name="triggers"> 
      <list> 
        <ref bean="triggerJobA" /> 
        <ref bean="triggerJobC" /> 
        <ref bean="triggerJobD" /> 
      </list> 
     </property> 
</bean> 

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
     <property name="triggers"> 
      <list> 
       <ref bean="triggerJobB" /> 
      </list> 
     </property> 
</bean> 
+0

我不知道,但我想知道爲什麼你想在第一時間安排兩個調度程序? –

+0

@MarcelStör如果您希望(或需要)爲不同類型的作業使用不同的'JobStore'實現('JDBCJobStore','RAMJobStore'),則可能需要使用兩個調度器。 –

回答

3

您需要爲每個調度的名稱,否則春天剛剛覆蓋與第二個第一調度。

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
    <property name="schedulerName" value="SchedulerOne"/> 
    <property name="triggers"> 
     <list> 
       <ref bean="triggerJobA" /> 
       <ref bean="triggerJobC" /> 
       <ref bean="triggerJobD" /> 
     </list> 
    </property> 
</bean> 


<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
    <property name="schedulerName" value="SchedulerTwo"/> 
    <property name="triggers"> 
     <list> 
      <ref bean="triggerJobB" /> 
     </list> 
    </property> 
</bean> 

之所以這樣,是:

「作業執行者」 其實並不是一個SchedulerFactoryBean。它是 調度程序bean(準確地說調用其啓動方法調用啓動Trigger-s的集合的QuartzScheduler.start方法), 由SchedulerFactoryBean提供。事實上,這個 調度程序在調度程序名稱(如果 沒有明確設置,對於每個配置的 調度程序工廠Bean具有相同的默認值)存儲(並查找)在SchedulerRepository 單元(SchedulerRepository.getInstance())中。

那怎麼除非你設置不同的schedulerName您 SchedulerFactoryBean來-S,你總是會被每個 和每一個SchedulerFactoryBean來-S獲得相同的調度

http://forum.springsource.org/showthread.php?40945-Multiple-Quartz-SchedulerFactoryBean-instances

相關問題