2016-03-24 79 views
0

我已經正確創建並安排了一個Job(我不寫這個作業和觸發器創建,只是簡單的說明)。計劃程序的創建和啓動過程如下:Quartz .net:使用JobListener,不會觸發作業

_scheduler = New StdSchedulerFactory().GetScheduler 
_scheduler.Start() 

作業在預定時間執行。

然後,我創建了一個非常簡單的(空,此刻)一JobListener:

Imports Quartz 

Public Class JobListener 
    Implements IJobListener 

#Region "Public properties" 

    Public ReadOnly Property Name As String Implements Quartz.IJobListener.Name 
     Get 
      Return "JOB_LISTENER" 
     End Get 
    End Property 

#End Region 

#Region "Methods" 

    Public Sub JobExecutionVetoed(context As Quartz.IJobExecutionContext) Implements Quartz.IJobListener.JobExecutionVetoed 
     Throw New NotImplementedException 
    End Sub 

    Public Sub JobToBeExecuted(context As Quartz.IJobExecutionContext) Implements Quartz.IJobListener.JobToBeExecuted 
     Throw New NotImplementedException 
    End Sub 

    Public Sub JobWasExecuted(context As Quartz.IJobExecutionContext, jobException As Quartz.JobExecutionException) Implements Quartz.IJobListener.JobWasExecuted 

    End Sub 

#End Region 

End Class 

,並把它添加到調度:

_scheduler = New StdSchedulerFactory().GetScheduler 
_scheduler.Start() 
_jobListener = New JobListener() 
_scheduler.ListenerManager.AddJobListener(_jobListener, GroupMatcher(Of JobKey).AnyGroup()) 

現在作業未執行已有。 任何暗示它爲什麼會發生?如果我在開始計劃之前添加JobListener

相同的結果:

_jobListener = New JobListener() 
_scheduler = New StdSchedulerFactory().GetScheduler 
_scheduler.ListenerManager.AddJobListener(_jobListener, GroupMatcher(Of JobKey).AnyGroup()) 
_scheduler.Start() 

回答

1

我想通了,這就是問題所在。

首先,建議:在開始使用Quartz .net進行調試之前,始終配置一個日誌。

當Job準備好執行時,會通知JobListener,然後調用JobToBeExecuted方法。正如你在我的JobListener實現中看到的,我在方法JobToBeExecuted中引發了一個異常,並且該異常阻止了Job的執行。

我沒有調查爲什麼JobListener中的錯誤應該阻止Job執行。我猜想有一連串的呼叫被異常破壞。無論如何,這是我的問題的答案。

相關問題