zoukankan      html  css  js  c++  java
  • Java定时任务调度工具Timer Quartz

     

    -----------------------------------Timer

    PS:Timer是 jdk中的;Quartz是第三方的

     

     

    PS:也即是返回执行任务时候的时间

     

    ---------------------------------------------------一个综合的例子

    import java.text.SimpleDateFormat;
    import java.util.TimerTask;
    
    public class DancingRobot extends TimerTask{
    
        @Override
        public void run() {
            // 获取最近一次任务执行的时间,将其格式化
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            System.out.println("最近执行任务的时间:"+sdf.format(scheduledExecutionTime()));//获取最近一次任务执行的时间,将其格式化
            System.out.println("开心的跳舞");
        }
    
    }
    import java.util.Timer;
    import java.util.TimerTask;
    
    public class WaterRobot extends TimerTask{
        private Timer timer;
        
        
        
        public WaterRobot(Timer timer) {
            this.timer = timer;
        }
        //最大容量为5L
        private Integer bucketCapacity = 0;
        @Override
        public void run() {
            // 灌水直到桶水满为止
            if(bucketCapacity<5){
                System.out.println("机器人加1L水");
                bucketCapacity++;
            }else{
                System.out.println("返回取消的任务数  before:"+timer.purge());
                cancel();//停止当前的机器人的执行
                System.out.println("机器人停止加水");
                System.out.println("返回取消的任务数   after:"+timer.purge());
                System.out.println("当前水容量:"+bucketCapacity+"L");
                try {
                    Thread.sleep(2000);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                timer.cancel();//停止所有的机器人操作
            }
        
        }
    
    }
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Timer;
    
    public class Main {
        
        public static void main(String[] args) {
            
            Timer timer = new Timer();
            //获取当前时间
            Calendar calendar =  Calendar.getInstance();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            System.out.println("当前时间:"+sdf.format(calendar.getTime()));
            
            DancingRobot dr = new DancingRobot();
            WaterRobot wr = new WaterRobot(timer);
            
            timer.schedule(dr, calendar.getTime(), 2000);
            timer.scheduleAtFixedRate(wr, calendar.getTime(), 1000);
        }
    
    /*    当前时间:2018-06-08 18:11:24
        最近执行任务的时间:2018-06-08 18:11:25
        开心的跳舞
        机器人加1L水
        机器人加1L水
        机器人加1L水
        最近执行任务的时间:2018-06-08 18:11:27
        开心的跳舞
        机器人加1L水
        机器人加1L水
        最近执行任务的时间:2018-06-08 18:11:29
        开心的跳舞
        返回取消的任务数  before:0
        机器人停止加水
        返回取消的任务数   after:1
        当前水容量:5L*/
    
    
    }

    ------------------------------------Quartz 

     -------------------------------------Hello world-----------------------

    package com.beet.test.HelloQuartz;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    
    public class HelloJob implements Job{
    
        public void execute(JobExecutionContext arg0) throws JobExecutionException {
            //打印当前的执行时间  
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            System.out.println("当前execution时间为:"+sdf.format(date));        
            // 编写具体的业务逻辑
            System.out.println("hello world");        
        }
    
    }
    package com.beet.test.HelloQuartz;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.quartz.JobBuilder;
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.SimpleScheduleBuilder;
    import org.quartz.SimpleTrigger;
    import org.quartz.TriggerBuilder;
    import org.quartz.impl.StdSchedulerFactory;
    
    public class HelloScheduler {
        public static void main(String[] args) throws SchedulerException {
            //创建一个jobdetail实例,将该实例与hellojob class绑定
            JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").build();
            //创建一个Trigger的实例,定义改job立即执行,并且每隔2秒钟重复一次,直到永远
            SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();
            //创建schedule实例
            StdSchedulerFactory sfact = new StdSchedulerFactory();
            Scheduler scheduler = sfact.getScheduler();
            scheduler.start();
            
            //打印当前的执行时间  
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            System.out.println("当前时间为:"+sdf.format(date));        
            
            scheduler.scheduleJob(jobDetail, trigger);
        }
    
    }

    当前时间为:2018-06-14 09:57:36
    当前execution时间为:2018-06-14 09:57:36
    hello world
    当前execution时间为:2018-06-14 09:57:38
    hello world
    当前execution时间为:2018-06-14 09:57:40
    hello world
    当前execution时间为:2018-06-14 09:57:42
    hello world
    当前execution时间为:2018-06-14 09:57:44

     

    public class HelloScheduler {
        public static void main(String[] args) throws SchedulerException {
            //创建一个jobdetail实例,将该实例与hellojob class绑定
            JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").build();
            System.out.println("jobDetail的名字:"+jobDetail.getKey().getName());        
            System.out.println("jobDetail的group:"+jobDetail.getKey().getGroup());        
            System.out.println("jobDetail的jobclass:"+jobDetail.getJobClass().getName());        
            
            //创建一个Trigger的实例,定义改job立即执行,并且每隔2秒钟重复一次,直到永远
            SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();
            //创建schedule实例
            StdSchedulerFactory sfact = new StdSchedulerFactory();
            Scheduler scheduler = sfact.getScheduler();
            scheduler.start();
            
            //打印当前的执行时间  
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            System.out.println("当前时间为:"+sdf.format(date));        
            
            scheduler.scheduleJob(jobDetail, trigger);
            
            /*jobDetail的名字:myJob
            jobDetail的group:group1
            jobDetail的jobclass:com.beet.test.HelloQuartz.HelloJob
             
            当前时间为:2018-06-14 10:10:25
            当前execution时间为:2018-06-14 10:10:26
            hello world*/
        }
    
    }

    ---------------------------------------------------------使用JobDataMap传参数

    package com.beet.test.HelloQuartz;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.quartz.Job;
    import org.quartz.JobDataMap;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.quartz.JobKey;
    import org.quartz.TriggerKey;
    
    public class HelloJob implements Job{
    
        public void execute(JobExecutionContext context) throws JobExecutionException {
            //打印当前的执行时间  
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        
            // 编写具体的业务逻辑
            //System.out.println("hello world");        
             JobKey key = context.getJobDetail().getKey();
             TriggerKey trKey = context.getTrigger().getKey();
                JobDataMap dataMap = context.getJobDetail().getJobDataMap();
                JobDataMap tDataMap = context.getTrigger().getJobDataMap();     //从中获取Map
                //String JobMsg = dataMap.getString("message");
                // Float jobFloatValue = dataMap.getFloat("FloatJobValue");
                String triggerMsg = tDataMap.getString("message");
                 Float triggerDoubleValue = tDataMap.getFloat("DoubleTriggerValue");
                    System.out.println("当前execution时间为:"+sdf.format(date));        
             System.out.println("我的job name和group是:"+key.getName()+":"+key.getGroup());    
            
             System.out.println("我的trigger name和group是:"+trKey.getName()+":"+trKey.getGroup());    
            
            
        
             
            //System.out.println("job message是:"+JobMsg);    
             //System.out.println("FloatJobVAlue是:"+jobFloatValue);    
             System.out.println("trigger message:"+triggerMsg);    
             System.out.println("FloatJobVAlue是:"+triggerDoubleValue);    
        }
    
    }
    package com.beet.test.HelloQuartz;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.quartz.JobBuilder;
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.SimpleScheduleBuilder;
    import org.quartz.SimpleTrigger;
    import org.quartz.TriggerBuilder;
    import org.quartz.impl.StdSchedulerFactory;
    
    public class HelloScheduler {
        public static void main(String[] args) throws SchedulerException {
            //创建一个jobdetail实例,将该实例与hellojob class绑定
            JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").usingJobData("message", "hello myJob1").usingJobData("FloatJobValue", 3.14f).build();
            System.out.println("jobDetail的名字:"+jobDetail.getKey().getName());        
            System.out.println("jobDetail的group:"+jobDetail.getKey().getGroup());        
            System.out.println("jobDetail的jobclass:"+jobDetail.getJobClass().getName());        
            
            //创建一个Trigger的实例,定义改job立即执行,并且每隔2秒钟重复一次,直到永远
            SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").usingJobData("message", "hello myTrigger").usingJobData("DoubleTriggerValue", 2.0D).startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();
            //创建schedule实例
            StdSchedulerFactory sfact = new StdSchedulerFactory();
            Scheduler scheduler = sfact.getScheduler();
            scheduler.start();
            
            //打印当前的执行时间  
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            System.out.println("当前时间为:"+sdf.format(date));        
            
            scheduler.scheduleJob(jobDetail, trigger);
            
            /*jobDetail的名字:myJob
            jobDetail的group:group1
            jobDetail的jobclass:com.beet.test.HelloQuartz.HelloJob
             
            当前时间为:2018-06-14 10:10:25
            当前execution时间为:2018-06-14 10:10:26
            hello world*/
        }
    
    }

     

     

    package com.beet.test.HelloQuartz;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.quartz.JobBuilder;
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.SimpleScheduleBuilder;
    import org.quartz.SimpleTrigger;
    import org.quartz.TriggerBuilder;
    import org.quartz.impl.StdSchedulerFactory;
    
    public class HelloScheduler {
        public static void main(String[] args) throws SchedulerException {
            //创建一个jobdetail实例,将该实例与hellojob class绑定
            JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").build();
        /*    System.out.println("jobDetail的名字:"+jobDetail.getKey().getName());        
            System.out.println("jobDetail的group:"+jobDetail.getKey().getGroup());        
            System.out.println("jobDetail的jobclass:"+jobDetail.getJobClass().getName());        */
            
            //打印当前的执行时间  
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            System.out.println("当前时间为:"+sdf.format(date));        
            date.setTime(date.getTime()+3000);//开始3s后执行
            
            Date endDate = new Date();
            endDate.setTime(endDate.getTime()+6000);
            //创建一个Trigger的实例,定义改job立即执行,并且每隔2秒钟重复一次,直到永远
            SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").startAt(date).endAt(endDate).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();
            //创建schedule实例
            StdSchedulerFactory sfact = new StdSchedulerFactory();
            Scheduler scheduler = sfact.getScheduler();
            scheduler.start();
            
            
            
            scheduler.scheduleJob(jobDetail, trigger);
            
            /*jobDetail的名字:myJob
            jobDetail的group:group1
            jobDetail的jobclass:com.beet.test.HelloQuartz.HelloJob
             
            当前时间为:2018-06-14 10:10:25
            当前execution时间为:2018-06-14 10:10:26
            hello world*/
        }
    
    }
    package com.beet.test.HelloQuartz;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.quartz.Job;
    import org.quartz.JobDataMap;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.quartz.JobKey;
    import org.quartz.Trigger;
    import org.quartz.TriggerKey;
    
    public class HelloJob implements Job{
    
        public void execute(JobExecutionContext context) throws JobExecutionException {
            //打印当前的执行时间  
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            System.out.println("当前execution时间为:"+sdf.format(date));        
            // 编写具体的业务逻辑
        //    System.out.println("hello world");        
            
            Trigger trigger = context.getTrigger();
            System.out.println("start time is "+trigger.getStartTime());        
            System.out.println("end time is "+trigger.getEndTime());        
            
        }
    
    }

    当前时间为:2018-06-14 14:14:32
     
    当前execution时间为:2018-06-14 14:14:35
    start time is Thu Jun 14 14:14:35 CST 2018
    end time is Thu Jun 14 14:14:38 CST 2018
    当前execution时间为:2018-06-14 14:14:37
    start time is Thu Jun 14 14:14:35 CST 2018
    end time is Thu Jun 14 14:14:38 CST 2018

     

     

    package com.beet.test.HelloQuartz;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.quartz.JobBuilder;
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.SimpleScheduleBuilder;
    import org.quartz.SimpleTrigger;
    import org.quartz.TriggerBuilder;
    import org.quartz.impl.StdSchedulerFactory;
    
    public class HelloScheduler {
        public static void main(String[] args) throws SchedulerException {
            //创建一个jobdetail实例,将该实例与hellojob class绑定
            JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").build();
        /*    System.out.println("jobDetail的名字:"+jobDetail.getKey().getName());        
            System.out.println("jobDetail的group:"+jobDetail.getKey().getGroup());        
            System.out.println("jobDetail的jobclass:"+jobDetail.getJobClass().getName());        */
            
            //打印当前的执行时间  
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            System.out.println("当前时间为:"+sdf.format(date));        
            date.setTime(date.getTime()+3000);//开始3s后执行
            
            Date endDate = new Date();
            endDate.setTime(endDate.getTime()+6000);
            //创建一个Trigger的实例,定义改job立即执行,并且每隔2秒钟重复一次,直到永远                                                                   被endDate 覆盖掉了执行计划
            SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").startAt(date).endAt(endDate).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();
            //创建schedule实例                                                                                定时                                       定频率
            StdSchedulerFactory sfact = new StdSchedulerFactory();
            Scheduler scheduler = sfact.getScheduler();
            scheduler.start();
            
            
            
            scheduler.scheduleJob(jobDetail, trigger);
            
            /*jobDetail的名字:myJob
            jobDetail的group:group1
            jobDetail的jobclass:com.beet.test.HelloQuartz.HelloJob
             
            当前时间为:2018-06-14 10:10:25
            当前execution时间为:2018-06-14 10:10:26
            hello world*/
        }
    
    }

    PS:
    ,表示或的关系
    -,至 5-7 五到七
    *,每秒钟
    /, 每分钟没小时 0/5 没隔5分钟(..)出发一次
    ?,不关心
    #,代表第.. 6#3 每月第三周的周五(6代表周五)
    L,代表最后

    在线地址

    package com.beet.test.HelloQuartz;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.quartz.CronScheduleBuilder;
    import org.quartz.CronTrigger;
    import org.quartz.JobBuilder;
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.SimpleScheduleBuilder;
    import org.quartz.TriggerBuilder;
    import org.quartz.impl.StdSchedulerFactory;
    
    public class HelloScheduler {
        public static void main(String[] args) throws SchedulerException {
            //创建一个jobdetail实例,将该实例与hellojob class绑定
            JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").build();
        /*    System.out.println("jobDetail的名字:"+jobDetail.getKey().getName());        
            System.out.println("jobDetail的group:"+jobDetail.getKey().getGroup());        
            System.out.println("jobDetail的jobclass:"+jobDetail.getJobClass().getName());        */
            
            //打印当前的执行时间  
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            System.out.println("当前时间为:"+sdf.format(date));        
            date.setTime(date.getTime()+3000);//开始3s后执行
            
            Date endDate = new Date();
            endDate.setTime(endDate.getTime()+6000);
            //创建一个Trigger的实例,定义改job立即执行,并且每隔2秒钟重复一次,直到永远
            CronTrigger trigger = (CronTrigger) TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ? *")).build();
            //创建schedule实例
            StdSchedulerFactory sfact = new StdSchedulerFactory();
            Scheduler scheduler = sfact.getScheduler();
            scheduler.start();
            scheduler.scheduleJob(jobDetail, trigger);
        
        }
    
    }
    package com.beet.test.HelloQuartz;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.quartz.Job;
    import org.quartz.JobDataMap;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.quartz.JobKey;
    import org.quartz.Trigger;
    import org.quartz.TriggerKey;
    
    public class HelloJob implements Job{
    
        public void execute(JobExecutionContext context) throws JobExecutionException {
            //打印当前的执行时间  
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            System.out.println("当前execution时间为:"+sdf.format(date));        
            // 编写具体的业务逻辑
             System.out.println("hello world");        
            
            /*Trigger trigger = context.getTrigger();
            System.out.println("start time is "+trigger.getStartTime());        
            System.out.println("end time is "+trigger.getEndTime());        */
            
        }
    
    }

    PS: 这两种方式推荐使用std的方式。

    package com.beet.test.HelloQuartz;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.quartz.CronScheduleBuilder;
    import org.quartz.CronTrigger;
    import org.quartz.JobBuilder;
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.SimpleScheduleBuilder;
    import org.quartz.TriggerBuilder;
    import org.quartz.impl.StdSchedulerFactory;
    
    public class HelloScheduler {
        public static void main(String[] args) throws SchedulerException, InterruptedException {
            //创建一个jobdetail实例,将该实例与hellojob class绑定
            JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").build();
        /*    System.out.println("jobDetail的名字:"+jobDetail.getKey().getName());        
            System.out.println("jobDetail的group:"+jobDetail.getKey().getGroup());        
            System.out.println("jobDetail的jobclass:"+jobDetail.getJobClass().getName());        */
            
            //打印当前的执行时间  
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            System.out.println("当前时间为:"+sdf.format(date));        
            date.setTime(date.getTime()+3000);//开始3s后执行
            
            Date endDate = new Date();
            endDate.setTime(endDate.getTime()+6000);
            //创建一个Trigger的实例,定义改job立即执行,并且每隔2秒钟重复一次,直到永远
            CronTrigger trigger = (CronTrigger) TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ? *")).build();
            //创建schedule实例
            StdSchedulerFactory sfact = new StdSchedulerFactory();
            Scheduler scheduler = sfact.getScheduler();
            scheduler.start();
            Date scheduleDate = scheduler.scheduleJob(jobDetail, trigger);
            System.out.println("开始执行时间为:"+sdf.format(scheduleDate));        
            //scheudle执行2s挂起
            Thread.sleep(2000);
            scheduler.standby();//挂起
            //挂起3s重新启动
            Thread.sleep(3000);
            scheduler.start();
        }
    
    }
  • 相关阅读:
    SAP OPEN UI5 Step 8: Translatable Texts
    SAP OPEN UI5 Step7 JSON Model
    SAP OPEN UI5 Step6 Modules
    SAP OPEN UI5 Step5 Controllers
    SAP OPEN UI5 Step4 Xml View
    SAP OPEN UI5 Step3 Controls
    SAP OPEN UI5 Step2 Bootstrap
    SAP OPEN UI5 Step1 环境安装和hello world
    2021php最新composer的使用攻略
    Php使用gzdeflate和ZLIB_ENCODING_DEFLATE结果gzinflate报data error
  • 原文地址:https://www.cnblogs.com/bee-home/p/9154848.html
Copyright © 2011-2022 走看看