Java Spring:如何从控制器监控Quartz作业?
我在Spring项目中创建了两个工作,它们在两个不同的时间独立运行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 } } 及 两者在给定的时间都运行良好,但我需要提供一些监视功能,通过
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);