zoukankan      html  css  js  c++  java
  • QuartZ

    声音感觉小的可以设置windows响度均衡:https://jingyan.baidu.com/article/ed15cb1ba197551be2698171.html
    cron表达式生成工具,可调试cron:http://www.bejson.com/othertools/cron/

     

     官网:www.quartz-scheduler.org

     

     组件模式:最终要的三部分:日任务job,触发器trigger,调度器schedule

    所有的任务调度都要通过execute完成

     

     

     入门案例:

    public class HelloJob implements Job {
    
        @Override
        public void execute(JobExecutionContext context) throws JobExecutionException {
            // 输出当前时间
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String dataString = sdf.format(date);
            // 工作内容
            System.out.println("正在进行数据库的备份工作,备份数据库的时间是:" + dataString);
        }
    
    }
    public class HelloScheduleDemo {
    
        public static void main(String[] args) throws Exception {
            // 1.调度器(Scheduler) ,从工厂中获取调度的实例(默认:实例化)
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
            // 2.任务实例
            JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1") // 参数1:任务的名称;参数2:任务组的名称
                    .build();
            // 3.触发器
            SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger", "group1")// 参数1:触发器名称;参数2:触发器组的名称
                    .startNow()// 马上启动触发器
                    .withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatSecondlyForever(5)).build();
    
            // 让调度器关联任务和触发器,保证按照触发器定义的条件执行任务
            scheduler.scheduleJob(jobDetail, trigger);
            scheduler.start();
        }
    
    }

    public class HelloScheduleDemo {
    
        public static void main(String[] args) throws Exception {
            // 1.调度器(Scheduler) ,从工厂中获取调度的实例(默认:实例化)
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
            // 2.任务实例
            JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1") // 参数1:任务的名称;参数2:任务组的名称
                    .build();
            System.out.println("名称:" + jobDetail.getKey().getName());
            System.out.println("组的名称:" + jobDetail.getKey().getGroup());
            System.out.println("任务类" + jobDetail.getJobClass().getName());
            // 3.触发器
            SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger", "group1")// 参数1:触发器名称;参数2:触发器组的名称
                    .startNow()// 马上启动触发器
                    .withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatSecondlyForever(5)).build();
    
            // 让调度器关联任务和触发器,保证按照触发器定义的条件执行任务
            scheduler.scheduleJob(jobDetail, trigger);
            scheduler.start();
        }
    
    }

    输出:

    名称:job1
    组的名称:group1
    任务类com.quartz.HelloJob
     INFO [main] - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
    正在进行数据库的备份工作,备份数据库的时间是:2019-09-04 23:06:49
    正在进行数据库的备份工作,备份数据库的时间是:2019-09-04 23:06:54
    正在进行数据库的备份工作,备份数据库的时间是:2019-09-04 23:06:59
    正在进行数据库的备份工作,备份数据库的时间是:2019-09-04 23:07:04
    正在进行数据库的备份工作,备份数据库的时间是:2019-09-04 23:07:09
    正在进行数据库的备份工作,备份数据库的时间是:2019-09-04 23:07:14

     

    HelloSchedulerDemo.java

     

    HelloJob.java

     

    JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
            // 从JobDetail中获取JobDataMap的数据
            String jobDataMessage = jobDataMap.getString("message");
            System.out.println("任务数据的参数值:" + jobDataMessage);
            // 获取Trigger对象中获取JobDataMap的数据
            JobDataMap jobDataMap2 = context.getTrigger().getJobDataMap();
            String triggerDataMessage = jobDataMap2.getString("message");
            System.out.println("触发器数据的参数值:" + triggerDataMessage);
            //获取trigger的内容
            TriggerKey triggerKey=context.getTrigger().getKey();
            System.out.println("触发器名称:"+triggerKey.getName()+";触发器组:"+triggerKey.getGroup());
            
            System.out.println("****************");
            
            //获取其他内容
            System.out.println("当前任务执行时间:"+sdf.format(context.getFireTime()));
            System.out.println("下一次任务执行时间:"+sdf.format(context.getNextFireTime()));

     

     

     

     如果想要获取job的数据,key不能设置和trigger一样

     

    public class HelloSchedulerDemoTrigger {
        public static void main(String[] args) throws Exception {
            //设置任务的开始时间
            Date startDate = new Date();
            startDate.setTime(startDate.getTime()+3000);
            //设置任务的结束时间
            Date endDate = new Date();
            endDate.setTime(endDate.getTime()+10000);
    
    
            //1.调度器(Scheduler),从工厂中获取调度的实例(默认:实例化new StdSchedulerFactory())
            Scheduler defaultScheduler = StdSchedulerFactory.getDefaultScheduler();
    
            //2.任务实例(JobDetail)
            JobDetail jobDetail = JobBuilder.newJob(HelloJobTrigger.class)
                    .withIdentity("job1", "group1")//
                    .usingJobData("message", "打印日志")//传递参数,名称message
                    .build();
            //3.触发器(Trigger)
            Trigger trigger = TriggerBuilder.newTrigger()
                    .withIdentity("trigger", "group1")
    //                .startNow()//马上启动触发器
                    .withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatSecondlyForever(5))
                    .startAt(startDate)//设置任务开始时间
                    .endAt(endDate)//设置任务结束时间
                    .build();
    
            //让调度器关联任务和触发器,保证按照触发器定义的条件执行任务
            defaultScheduler.scheduleJob(jobDetail, trigger);
            //启动
            defaultScheduler.start();
        }
    }
    public class HelloJobTrigger implements Job {
        @Override
        public void execute(JobExecutionContext context) throws JobExecutionException {
            //输出当前日期
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String dateString = sdf.format(date);
    
            //工作內容
            System.out.println("正在进行数据库的备份工作" + dateString);
    
            //获取jobKey、startTime、endTime
            Trigger trigger = context.getTrigger();
            System.out.println("jobKey的名称:" + trigger.getJobKey().getName());
            System.out.println("jobKey组的名称:" + trigger.getJobKey().getGroup());
    
            System.out.println("任务的开始时间:" + sdf.format(trigger.getStartTime()));
            System.out.println("任务的结束时间:" + sdf.format(trigger.getEndTime()));
        }
    }

     

     

     

     

     

     

     

     

      cron表达式生成工具:http://www.bejson.com/othertools/cron/

     

     

     

     

     

     

     

     

    本教程重点讲解StdSchedulerFactory,DirectSchedulerFactory自行了解

     

     quartz.properties

     

     

     

     

     

     

     

     

     

     

     

     

     

    public class MyJobListener implements JobListener {
    
        @Override
        public String getName() {
            // 监听器名称
            String name = this.getClass().getName();
            name = "监听器的名称是:" + name;
            return name;
        }
    
        @Override
        public void jobToBeExecuted(JobExecutionContext context) {
            System.out.println("Scheduler在JobDetail将要执行时调用的方法");
        }
    
        @Override
        public void jobExecutionVetoed(JobExecutionContext context) {
            System.out.println("否决");
    
        }
    
        @Override
        public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) {
            System.out.println("scheduler在job执行之后的监听");
    
        }
    
    }
    public class HelloSchedulerDemoJobListener {
        public static void main(String[] args) throws SchedulerException, Exception {
            // 任务实例:
            JobDetail jobDetail = JobBuilder.newJob(HelloJobScheduler.class)
                    .withIdentity("job1", "group1")
                    .build();
    
            // 触发器:
            Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")// 参数1:设置触发器名称,参数2:设置触发器组的名称
                    .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ?")).build();
    
            // 让调度器关联任务和触发器,保证按照触发器定义的添加执行任务
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
            Date scheduleJob = scheduler.scheduleJob(jobDetail, trigger);
            System.out.println("调度器的开始时间是:" + new SimpleDateFormat("yyyy-MM-dd HH:dd:ss").format(scheduleJob));
            
            
            //创建并注册一个全局的job listener
    //        scheduler.getListenerManager().addJobListener(new MyJobListener(),EverythingMatcher.allJobs());
            
            
            //创建并注册一个局部的job listener
            scheduler.getListenerManager().addJobListener(new MyJobListener(),KeyMatcher.keyEquals(JobKey.jobKey("job1", "group1")));
            
            scheduler.start();
            
        }
    }

     

     

    public class MyTriggerListener implements TriggerListener {
    
        @Override
        public String getName() {
            String name = this.getClass().getSimpleName();
            System.out.println("触发器的名称:" + name);
            return name;
        }
    
        @Override
        public void triggerFired(Trigger trigger, JobExecutionContext context) {
            String triggerName = trigger.getKey().getName();
            System.out.println("触发器的名称:" + triggerName + "被触发了");
        }
    
        @Override
        public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) {
            String triggerName = trigger.getKey().getName();
            System.out.println("触发器的名称:" + triggerName + "没有触发");
            return false;// true表示不会执行job的方法
        }
    
        @Override
        public void triggerMisfired(Trigger trigger) {
            String triggerName = trigger.getKey().getName();
            System.out.println("触发器的名称:" + triggerName + "错过触发");
        }
    
        @Override
        public void triggerComplete(Trigger trigger, JobExecutionContext context,
                CompletedExecutionInstruction triggerInstructionCode) {
            String triggerName = trigger.getKey().getName();
            System.out.println("触发器的名称:" + triggerName + "完成之后触发");
        }
    
    }
    // 创建并注册一个全局的trigger listener
    //        scheduler.getListenerManager().addTriggerListener(new MyTriggerListener(), EverythingMatcher.allTriggers());
    
            // 创建并注册一个局部的trigger listener
            scheduler.getListenerManager().addTriggerListener(new MyTriggerListener(),
                    KeyMatcher.keyEquals(TriggerKey.triggerKey("trigger1", "group1")));

     

     

  • 相关阅读:
    Assembly之instruction之CMP
    Assembly之Instruction之Byte and Word
    MSP430之section(1)
    MSP430之software development flow
    openMSP430之Custom linker script
    CDC之Synchronizers
    CDC之Metastability
    Embedded之Stack之三
    Embedded之Stack之二
    Embedded之Stack之一
  • 原文地址:https://www.cnblogs.com/hk-zsg/p/11462623.html
Copyright © 2011-2022 走看看