Quartz .net:使用JobListener,不会触发作业

时间:2016-03-24 09:43:18

标签: quartz.net

我已经正确创建并安排了一个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()

1 个答案:

答案 0 :(得分:1)

我想出了问题所在。

首先,建议:在开始使用Quartz .net进行调试之前始终配置日志。

当Job准备好执行时,会通知JobListener,然后调用JobToBeExecuted方法。正如您在JobListener的实现中所看到的,我在JobToBeExecuted方法中抛出异常,该异常阻止了Job的执行。

我没有调查为什么JobListener中的错误会阻止Job执行。我想有一系列被异常打破的电话。 无论如何,这是我的问题的答案。