监听器方便在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失效问题(其实就是重新注册监听器)。