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

 

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

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

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

首先实现TriggerListener,如下:

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时添加全局监听器,

   factory = new StdSchedulerFactory(configProperties);
   //启动调度
  scheduler = factory.getScheduler();
   TriggerListener myListener=new MonitorTriggerListener();
  scheduler.addGlobalTriggerListener(myListener);
  scheduler.start();

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是使用Quartz添加任务的示例代码: 首先,我们需要创建一个Job类,该类用于定义要执行的任务。例如,我们创建一个名为SampleJob的Job类: ```java import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class SampleJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("SampleJob is running."); } } ``` 接下来,我们需要创建一个Trigger,用于定义任务的执行时间。例如,我们创建一个名为SampleTrigger的SimpleTrigger: ```java import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.SimpleScheduleBuilder; import org.quartz.SimpleTrigger; import org.quartz.TriggerBuilder; public class SampleTrigger { public static SimpleTrigger create() { SimpleTrigger trigger = TriggerBuilder.newTrigger() .withIdentity("SampleTrigger", "SampleGroup") .startNow() .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) .repeatForever()) .build(); return trigger; } } ``` 在上面的代码中,我们定义了一个名为SampleTriggerTrigger,它会在调度器启动后立即执行,并且每隔10秒钟重复执行一次。 最后,我们需要创建一个Scheduler并将任务Job和Trigger添加到调度器中。例如: ```java import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.impl.StdSchedulerFactory; public class QuartzDemo { public static void main(String[] args) { try { Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); JobDetail job = JobBuilder.newJob(SampleJob.class) .withIdentity("SampleJob", "SampleGroup") .build(); SimpleTrigger trigger = SampleTrigger.create(); scheduler.scheduleJob(job, trigger); scheduler.start(); } catch (SchedulerException e) { e.printStackTrace(); } } } ``` 运行上面的代码,就可以将任务添加Quartz调度器中并开始执行了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值