监听器方便在Trigger执行完毕,Trigger执行错误等地方进行监听处理。
下面代码举个SchedulerListener的例子: 在Trigger最后一次执行的时候监听
import javax.annotation.Resource;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerListener;
import org.quartz.Trigger;
import org.quartz.TriggerKey;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
/**
*
* @ClassName: SchedulerTriggerListener
* @Description: Trigger监听器
* @author zhuyb
* @date 2014-12-15 下午7:39:28
*
*/
@Service("schedulerTriggerListenerService")
public class SchedulerTriggerListenerServiceImpl implements SchedulerListener {
private static Logger logger = LoggerFactory.getLogger(SchedulerTriggerListenerServiceImpl.class);
@Resource
private SchedulerTriggersService schedulerTriggersService;
@Resource
private Scheduler scheduler;
@Override
public void jobScheduled(Trigger trigger) {
// TODO Auto-generated method stub
}
@Override
public void jobUnscheduled(TriggerKey triggerKey) {
// TODO Auto-generated method stub
}
/**
*
* @Title: triggerFinalized
* @Description: 轮询删除已被Quartz删除的内容
* @param @param trigger
* @author zhuyb
* @throws
*/
@Override
public void triggerFinalized(Trigger trigger) {
try {
if (trigger.getNextFireTime() == null) {
logger.info("Name="+trigger.getKey().getName()+ ", Group=" + trigger.getKey().getGroup());
int i = schedulerTriggersService.deleteByNotExistInTriggers();
logger.info("删除行数:" + i);
}
} catch (Exception e) {
logger.error("监听器错误:",e);
}
}
@Override
public void triggerPaused(TriggerKey triggerKey) {
}
@Override
public void triggersPaused(String triggerGroup) {
// TODO Auto-generated method stub
}
@Override
public void triggerResumed(TriggerKey triggerKey) {
// TODO Auto-generated method stub
}
@Override
public void triggersResumed(String triggerGroup) {
// TODO Auto-generated method stub
}
@Override
public void jobAdded(JobDetail jobDetail) {
// TODO Auto-generated method stub
}
@Override
public void jobDeleted(JobKey jobKey) {
}
@Override
public void jobPaused(JobKey jobKey) {
// TODO Auto-generated method stub
}
@Override
public void jobsPaused(String jobGroup) {
// TODO Auto-generated method stub
}
@Override
public void jobResumed(JobKey jobKey) {
// TODO Auto-generated method stub
}
@Override
public void jobsResumed(String jobGroup) {
// TODO Auto-generated method stub
}
@Override
public void schedulerError(String msg, SchedulerException cause) {
// TODO Auto-generated method stub
}
@Override
public void schedulerInStandbyMode() {
// TODO Auto-generated method stub
}
@Override
public void schedulerStarted() {
}
@Override
public void schedulerStarting() {
}
@Override
public void schedulerShutdown() {
// TODO Auto-generated method stub
}
@Override
public void schedulerShuttingdown() {
}
@Override
public void schedulingDataCleared() {
// TODO Auto-generated method stub
}
其实可以不必实现上述接口(有一堆你不需要的方法要重写), 可以用SchedulerListenerSupport替代,只需要实现需要的方法。
监听注册:
@Resource
private Scheduler scheduler;
@Resource
private SchedulerTriggerListenerServiceImpl schedulerTriggerListener;
scheduler.getListenerManager().addSchedulerListener(schedulerTriggerListener);
以上就是一个监听器在Spring的完整集成。
具体很多其他的监听功能看业务需求吧
官方API差不多够用了:
结合我的另一篇文字:http://blog.csdn.net/wenniuwuren/article/details/42004539
就能解决Listener因为服务器关闭或重启Listener失效问题(其实就是重新注册监听器)。