2016-03-24 2 views
0

Я правильно создал и назначил Работу (я не пишу здесь Job и Trigger, просто чтобы быть кратким). Планировщик создается и запускается следующим образом: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, и это исключение предотвращает выполнение задания.

Я не исследовал, почему ошибка в JobListener должна препятствовать выполнению задания. Я предполагаю, что существует цепочка вызовов, нарушенных исключением. В любом случае, это ответ на мой вопрос.