2013-07-03 3 views
3

Я создал две рабочие места в проекте 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 и видел другие ресурсы, но смущался во время его реализации. Я не получаю точно, как использовать этот прослушиватель в Контроллер весны, чтобы я мог контролировать оба задания в моей jsp.

Обновление: Я использую Quartz 1.8. Как проверить, приостановлено ли какое-либо задание? Есть ли способ перезапустить любую приостановленную или сломанную работу?

ответ

7

Вы можете легко восстановить вашу работу триггера состояние

пример кварцевой 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 Docs, 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); 
+0

'TriggerKey' нет в весне и кварце. Я использую Quartz 1.8.x. – agpt

+0

любезно ознакомьтесь с обновленной частью. – agpt

+0

Вы правы: org.quartz.TriggerKey присутствует на кварце 2.x и не на 1.8 – willome

3

jwatch Используйте его очень легко configure.And также обеспечить , которая будет возвращать вам всю информацию о заданиях и планировщиков в формате JSON, чтобы вы могли легко разобрать и отобразить на JSP page.A образца 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: click here.

1

Я просто сделал несколько проб и ошибок с Quartz 1.8.6 и со ссылкой от @willome ответа, я хотел бы поставить свой рабочий код здесь:

Я получил объект планировщика из контекста:

Scheduler scheduler = (Scheduler) SpringContextService.getBean(context,"scheduler");

Затем с помощью объекта планировщика, я получаю триггер объект имя, которое я упомянул в конфигурации кварца:

Trigger cronTrigger = scheduler.getTrigger("cronTrigger", Scheduler.DEFAULT_GROUP);

и через триггерный объект (его абстрактный класс) Я получаю getPreviousFireTime(); и getNextFireTime(); согласно моему выражению cron, и используя ajax, я получаю последнее обновление по моему выбору временного интервала, вызывая контроллер пружины.

Все

Смежные вопросы