quartz任務並行

任務有並行和串行之分,並行是指:一個定時任務,當執行時間到了的時候,立刻執行此任務,不管當前這個任務是否在執行中;串行是指:一個定時任務,當執行時間到了的時候,需要等待當前任務執行完畢,再去執行下一個任務。

quartz框架中防止任務並行可以有兩種方案:
1、如果是通過MethodInvokingJobDetailFactoryBean在運行中動態生成的Job,配置的xml文件有個concurrent屬性,這個屬性的功能是配置此job是否可以並行運行,如果爲false則表示不可以並行運行,否則可以並行。如果一個job的業務處理髮費的時間超過了job的啓動的間隔時間(repeatInterval),這個屬性非常有用。如果爲false,那麼,在這種情況下,當前job還在運行,那麼下一個job只能延時運行。如果爲true,那麼job就會並行運行。

     <bean id=" jobCompareB2cAndLocal" class="com.vipshop.management.util.quartz.MethodInvokingJobDetailFactoryBean ">
          <property name="targetObject " ref="delegateJob " />
          <property name="targetMethod " value="方法名" />
          <property name="concurrent " value="false "></property >
    </bean >

2、如果是通過自定義要執行的任務的類的名稱實現job的話,則有另一種方式:
默認的任務的類實現org.quartz.Job接口,此時任務是stateless(無狀態的),即會出現並行的情況,那麼如何避免這種情況發生呢?
解決方案:使QuartzJobBean類實現org.quartz.StatefulJob接口即可(StatefulJob接口僅僅是擴展了 Job 接口,未加入新的方法,可以不需實現Job接口了,那麼此時任務就會變成stateful(有狀態的),此時的任務也就會串行執行了。

public class BackCoupon implements StatefulJob {

    @Override
    public void execute(JobExecutionContext context)
              throws JobExecutionException {

    }

}

發佈了146 篇原創文章 · 獲贊 37 · 訪問量 93萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章