我已经正确创建并安排了一个Job(我不在这里编写Job和Trigger创建,只是为了简短)。调度程序的创建和启动如下:
_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()
答案 0 :(得分:1)
我想出了问题所在。
首先,建议:在开始使用Quartz .net进行调试之前始终配置日志。
当Job准备好执行时,会通知JobListener,然后调用JobToBeExecuted方法。正如您在JobListener的实现中所看到的,我在JobToBeExecuted方法中抛出异常,该异常阻止了Job的执行。
我没有调查为什么JobListener中的错误会阻止Job执行。我想有一系列被异常打破的电话。 无论如何,这是我的问题的答案。