Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring:如何从控制器监控Quartz作业?_Java_Spring_Spring Mvc_Quartz Scheduler - Fatal编程技术网

Java Spring:如何从控制器监控Quartz作业?

Java Spring:如何从控制器监控Quartz作业?,java,spring,spring-mvc,quartz-scheduler,Java,Spring,Spring Mvc,Quartz Scheduler,我在Spring项目中创建了两个工作,它们在两个不同的时间独立运行 public class JobA extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext arg0)throws JobExecutionException { // my actual work } } 及 两者在给定的时间都运行良好,但我需要提供一些监视功能,通过

我在Spring项目中创建了两个工作,它们在两个不同的时间独立运行

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

两者在给定的时间都运行良好,但我需要提供一些监视功能,通过这些功能我们可以检查作业是否正在运行。
我也看到了其他资源,但在实施时感到困惑。我不知道如何在Spring控制器中使用这个监听器,以便在jsp中监视这两个作业

更新: 我用的是石英1.8。如何检查作业是否已停止?有什么方法可以重新启动任何停止或中断的作业吗?

使用它非常容易配置。它还提供了一个以JSON格式返回有关作业和调度程序的所有信息,以便您可以轻松解析并显示在jsp页面上。监控所有作业实例的示例url如下

http://localhost:8081/jwatch/ui?action=monitor_jobs
答案很简单:

data: [
    {
      calendarName: "",
      fireTime: "06/30/11 15:59:01 EDT",
      jobGroup: "group0",
      jobName: "j_1",
      jobRunTime: 0,
      nextFireTime: "06/30/11 16:00:01 EDT",
      previousFireTime: "06/30/11 15:58:01 EDT",
      quartzInstanceId: "f5c1edd6-0101-4c93-9162-58ca104b8fdb",
      recovering: false,
      refireCount: 0,
      scheduledFireTime: "06/30/11 15:59:01 EDT",
      schedulerId: "MEGA",
      schedulerName: "MegaScheduler",
      triggerGroup: "group0",
      triggerName: "t_1"
    },
    {
      calendarName: "",
      fireTime: "06/30/11 15:59:01 EDT",
      jobGroup: "group1",
      jobName: "j_1",
      jobRunTime: 0,
      nextFireTime: "06/30/11 16:00:01 EDT",
      previousFireTime: "06/30/11 15:58:01 EDT",
      quartzInstanceId: "f5c1edd6-0101-4c93-9162-58ca104b8fdb",
      recovering: false,
      refireCount: 0,
      scheduledFireTime: "06/30/11 15:59:01 EDT",
      schedulerId: "MEGA",
      schedulerName: "MegaScheduler",
      triggerGroup: "group1",
      triggerName: "t_1"
    },...

Soources:。

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

石英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); 
石英1.8

根据API文档,
Scheduler.getTriggerState(String triggerName,String triggerGroup)
可以告诉您特定触发器的状态,返回以下常量之一:
trigger.state\u NORMAL,trigger.state\u PAUSED,trigger.state\u COMPLETE,trigger.state\u ERROR,trigger.state\u BLOCKED,trigger.state\u 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);

我刚刚对Quartz 1.8.6做了一些尝试和错误,并参考了@willome answer,我想把我的工作代码放在这里:

我从上下文接收到调度程序的对象:

调度程序=(调度程序)SpringContextService.getBean(上下文,“调度程序”)

然后通过使用scheduler对象,我得到了我在quartz配置中提到的名为的触发器对象:

Trigger cronTrigger=scheduler.getTrigger(“cronTrigger”,scheduler.DEFAULT\u组)

通过触发器对象(它是一个抽象类),我得到
getPreviousFireTime()
getNextFireTime()根据我的cron表达式,并使用ajax,通过调用springcontroller,我可以获得关于时间间隔选择的最新更新


谢谢,Spring和Quartz中没有TriggerKey。我使用的是Quartz 1.8.x。你是对的:org.Quartz.TriggerKey出现在Quartz 2.x上,而不是1.8上。使用1.8还有其他方法吗?我无法更新到2.x。我已经搜索了API,但仍然没有找到任何解决方案
 // get the scheduler factory bean from the spring context
 Scheduler scheduler = (Scheduler)   getApplicationContext().getBean("schedulerFactoryBean");
 // get the state 
 int state = scheduler.getTriggerState(triggerName, triggerGroup);