前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >quartz监控日志(二)添加监听器

quartz监控日志(二)添加监听器

作者头像
一笠风雨任生平
发布2019-08-02 11:09:34
1.4K0
发布2019-08-02 11:09:34
举报
文章被收录于专栏:服务化进程服务化进程

上一章介绍监控job有三种方案,其实还有一个简单方案是实现quartz的TriggerListener。

上次我也试了这个方案,但是由于操作错误,导致没有监控成功,所以才选择分析源码来实现代理进行监控。

后面我看了些资料,并重新试了下,这种方案是可行的,并且非常方便。

首先实现TriggerListener,如下:

代码语言:javascript
复制
public class MonitorTriggerListener implements TriggerListener {
    
    private final static Logger logger=Logger.getLogger(MonitorJobRunShell.class);
    private ThreadLocal<QuartzLog> localLog=new ThreadLocal<QuartzLog>();
    /**  
     * @see org.quartz.TriggerListener#getName()    
     */
    @Override
    public String getName() {
        return "MonitorTriggerListener";
    }
    
    /**  
     * @see org.quartz.TriggerListener#triggerComplete(org.quartz.Trigger, org.quartz.JobExecutionContext, int)    
     */
    @Override
    public void triggerComplete(Trigger arg0, JobExecutionContext jec, int arg2) {
        try {
            QuartzLog quartzLog=localLog.get();
            if(quartzLog==null)return ;
            quartzLog.setExeTime(jec.getJobRunTime());
            getService().update(quartzLog);
        } catch (Exception e) {
            logger.error("记录job结束时间异常",e);
        }catch (Throwable e) {
            logger.error("记录job结束时间出错",e);
        }
    }
    
    /**  
     * @see org.quartz.TriggerListener#triggerFired(org.quartz.Trigger, org.quartz.JobExecutionContext)    
     */
    @Override
    public void triggerFired(Trigger arg0, JobExecutionContext jec) {
        try {
            JobDetail jobDetail = jec.getJobDetail();
            System.out.println(localLog.get());
            QuartzLog quartzLog=getService().insert(jobDetail.getName());
            localLog.set(quartzLog);
            System.out.println(quartzLog);
        } catch (Exception e) {
            logger.error("记录job开始时间异常",e);
        }catch (Throwable e) {
            logger.error("记录job开始时间出错",e);
        }
    }
    
    /**  
     * @see org.quartz.TriggerListener#triggerMisfired(org.quartz.Trigger)    
     */
    @Override
    public void triggerMisfired(Trigger arg0) {
    }
    
    /**  
     * @see org.quartz.TriggerListener#vetoJobExecution(org.quartz.Trigger, org.quartz.JobExecutionContext)    
     */
    @Override
    public boolean vetoJobExecution(Trigger arg0, JobExecutionContext arg1) {
        return false;
    }
    private QuartzLogService getService(){
        return (QuartzLogService)BeanLocator.getBeanInstance("quartzLogService");
    }
}

然后在初始化StdSchedulerFactory时添加全局监听器,

代码语言:javascript
复制
factory = new StdSchedulerFactory(configProperties);
   //启动调度
  scheduler = factory.getScheduler();
   TriggerListener myListener=new MonitorTriggerListener();
  scheduler.addGlobalTriggerListener(myListener);
  scheduler.start();

这样同样可以达到监控效果。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档