zoukankan      html  css  js  c++  java
  • Quartz入门 (四) 监听器Listener

      Quartz的监听器用于当任务调度中你所关注事件发生时,能够及时获取这一事件的通知。类似于任务执行过程中的邮件、短信类的提醒。Quartz 的监听器有Job监听器,Trigger监听器, Scheduler监听器,对不同层面进行监控。三者的使用方法类似,在开始介绍三种监听器之前,需要明确两个概念:全局监听器非全局监听器,二者的区别在于:全局监听器能够接收到所有的Job/Trigger的事件通知,而非全局监听器只能接收到在其上注册的Job或Trigger的事件,不在其上注册的Job或Trigger则不会进行监听。

    JobListener

      任务调度过程中,与任务Job相关的事件包括:job开始要执行的提示; job执行完成的提示灯。

    public interface JobListener {
        
      String getName();
    void jobToBeExecuted(JobExecutionContext var1); void jobExecutionVetoed(JobExecutionContext var1); void jobWasExecuted(JobExecutionContext var1, JobExecutionException var2); }

    demo:

    自己写一个监听器实现JobListener接口:

    public class MailJobListener implements JobListener {
    
        @Override
        public String getName() {
            return "listener of mail job";
        }
    
        @Override
        public void jobExecutionVetoed(JobExecutionContext context) {
            System.out.println("取消执行:	 "+context.getJobDetail().getKey());
        }
    
        @Override
        public void jobToBeExecuted(JobExecutionContext context) {
            System.out.println("准备执行:	 "+context.getJobDetail().getKey());
        }
    
        @Override
        public void jobWasExecuted(JobExecutionContext context, JobExecutionException arg1) {
            System.out.println("执行结束:	 "+context.getJobDetail().getKey());
            System.out.println();
        }
    
    }

    Job:

    public class MailJob implements Job {
    
        @Override
        public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
            JobDetail detail=jobExecutionContext.getJobDetail();
            String email = detail.getJobDataMap().getString("email");
    
            SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
            String now = sdf.format(new Date());
    
            System.out.printf("给邮件地址 %s 发出了一封定时邮件, 当前时间是: %s%n" ,email, now);
        }
    }


    测试:

    public class Test {
        public static void main(String[] args) throws Exception{
    
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
    
            Trigger trigger= newTrigger()
                    .withIdentity("trigger1","group1")
                    .startNow()
                    .withSchedule(simpleSchedule().withIntervalInSeconds(1).withRepeatCount(5))
                    .build();
    
            JobDetail jobDetail=newJob(MailJob.class)
                    .withIdentity("job1","group1")
                    .usingJobData("email","臭弟弟")
                    .build();
    
    //这是自己写的那个监听器: MailJobListener mailJobListener
    =new MailJobListener();
    //构造匹配pickNewsJob中的JobKey的keyMatcher KeyMatcher<JobKey> keyMatcher = KeyMatcher.keyEquals(jobDetail.getKey());
    //加入调度器: scheduler.getListenerManager().addJobListener(mailJobListener,keyMatcher); scheduler.scheduleJob(jobDetail,trigger); scheduler.start(); Thread.sleep(
    20000); scheduler.shutdown(); } }

  • 相关阅读:
    大数据-linux之大数据-shell位置参数变量
    大数据-linux之大数据-shell环境变量
    【httprunner】环境配置
    NOIP/CSP 普及组 历年复赛真题题单(1998~2020)
    【自动化测试中的自定义函数支持】方案+踩坑
    【转】nodejs npm安装教程2
    my read travel / nanjing 48 scenery / landscape
    OS + Windows 10 & Android shuangxitong
    OS + Windows10 on ARM / Windows 10 for arm
    OS + Centos df busy
  • 原文地址:https://www.cnblogs.com/crazy-lc/p/12527064.html
Copyright © 2011-2022 走看看