Spring 3.1和Quartz中的Job Listeners和Trigger Listener

时间:2014-11-06 06:24:16

标签: spring quartz-scheduler

我使用Spring 3.0和Quartz 1.6 JDBC Job Store进行作业调度。我希望在触发器失效时生成电子邮件警报。如何在Spring Quartz中配置Trigger misfire事件监听器?

1 个答案:

答案 0 :(得分:4)

1)使用triggerMisfired方法中的代码创建一个触发器监听器:

package foo;

import org.quartz.JobExecutionContext;
import org.quartz.Trigger;
import org.quartz.TriggerListener;
import org.quartz.Trigger.CompletedExecutionInstruction;

public class MyTriggerListener implements TriggerListener {

    private String name;

    public MyTriggerListener(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void triggerComplete(Trigger trigger, JobExecutionContext context,
            CompletedExecutionInstruction triggerInstructionCode) {

    }

    public void triggerFired(Trigger trigger, JobExecutionContext context) {

    }

    public void triggerMisfired(Trigger trigger) {
        // here goes your code for sending email
    }

    public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) {

        return false;
    }

}

还可以选择扩展TriggerListenerSupport并仅覆盖triggerMisfired方法:

public class MyTriggerListener extends TriggerListenerSupport {

    private String name;

    public MyOtherTriggerListener(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public void triggerMisfired(Trigger trigger, JobExecutionContext context) {
        // do something with the event
    }
}

2)将监听器bean添加到spring配置:

    <bean id="triggerListener"
            class="foo.MyTriggerListener">
    </bean>

并将侦听器bean与任何其他属性(如触发器等)一起放在SchedulerFactoryBean中。

   <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    .....
    <property name="globalTriggerListeners">
        <list>
        <ref bean="triggerListener" />
        </list>
    </property>
    ...

   </bean>