![](/img/trans.png)
[英]Repeating a job from quartz (Spring + Quartz application) - Job Chaining
[英]Spring: How to Monitor Quartz Job from controller?
我在Spring項目中創建了兩個作業,這兩個作業在兩個不同的時間相互獨立運行。
public class JobA extends QuartzJobBean
{
@Override
protected void executeInternal(JobExecutionContext arg0)throws JobExecutionException
{
// my actual work
}
}
和
public class JobB extends QuartzJobBean
{
@Override
protected void executeInternal(JobExecutionContext arg0)throws JobExecutionException
{
// my actual work
}
}
兩者都在給定的時間運行正常,但我需要提供一些監視功能,通過它我們可以檢查作業是否正在運行。
我遇到了JobListener並且已經看到了其他資源,但在實施時卻感到困惑。 我沒有准確地知道如何在Spring Controller中使用這個監聽器,這樣我就可以在我的jsp中監視這兩個工作。
更新:我使用的是Quartz 1.8。 如何檢查是否有任何工作停止? 我們有什么方法可以重新啟動任何停止或破壞的工作?
您可以輕松檢索作業觸發狀態
石英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_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);
使用jwatch非常容易配置。它還提供Restful-api ,它將以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: 點擊這里 。
我剛剛使用Quartz 1.8.6進行了一些試驗和錯誤以及來自@willome的參考答案,我想把我的工作代碼放在這里:
我從上下文中收到了Scheduler的對象:
Scheduler scheduler = (Scheduler) SpringContextService.getBean(context,"scheduler");
然后通過使用調度程序對象,我得到石英配置中提到的名稱的觸發器對象:
Trigger cronTrigger = scheduler.getTrigger("cronTrigger", Scheduler.DEFAULT_GROUP);
並通過觸發器對象(它是一個抽象類)我得到getPreviousFireTime();
和getNextFireTime();
根據我的cron表達式,並使用ajax我通過調用spring controller獲得我選擇的時間間隔的最新更新。
謝謝大家
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.