Spring:如何从控制器监视Quartz Job?

agp*_*gpt 4 java spring spring-mvc quartz-scheduler

我在Spring项目中创建了两个作业,这两个作业在两个不同的时间相互独立运行.

public class JobA extends QuartzJobBean
{
    @Override
    protected void executeInternal(JobExecutionContext arg0)throws JobExecutionException 
    {
      // my actual work
    }
}
Run Code Online (Sandbox Code Playgroud)

public class JobB extends QuartzJobBean
{
    @Override
    protected void executeInternal(JobExecutionContext arg0)throws JobExecutionException 
    {
      // my actual work
    }
}
Run Code Online (Sandbox Code Playgroud)

两者都在给定的时间运行正常,但我需要提供一些监视功能,通过它我们可以检查作业是否正在运行.
我遇到了JobListener并且已经看到了其他资源,但在实施时却感到困惑.我没有准确地知道如何在Spring Controller中使用这个监听器,这样我就可以在我的jsp中监视这两个工作.

更新:我使用的是Quartz 1.8.如何检查是否有任何工作停止?我们有什么方法可以重新开始任何暂停或破坏的工作?

wil*_*ome 9

您可以轻松检索作业触发状态

石英2.x的例子:

// get the scheduler factory bean from the spring context
Scheduler scheduler = (Scheduler) getApplicationContext().getBean("schedulerFactoryBean");
// get the TriggerKey 
TriggerKey triggerKey = TriggerKey.triggerKey("serviceCronTrigger");
// get the state from the triggerKey
TriggerState triggerState = scheduler.getTriggerState(triggerKey); 
Run Code Online (Sandbox Code Playgroud)

适用于石英1.8

根据API文档,Scheduler.getTriggerState(String triggerName, String triggerGroup)可以告诉您特定触发器的状态,返回以下常量之一:Trigger.STATE_NORMAL, Trigger.STATE_PAUSED, Trigger.STATE_COMPLETE, Trigger.STATE_ERROR, Trigger.STATE_BLOCKED, Trigger.STATE_NONE

 // get the scheduler factory bean from the spring context
 Scheduler scheduler = (Scheduler)   getApplicationContext().getBean("schedulerFactoryBean");
 // get the state 
 int state = scheduler.getTriggerState(triggerName, triggerGroup);
Run Code Online (Sandbox Code Playgroud)