zoukankan      html  css  js  c++  java
  • quartz实现任务调度


    Quartz框架核心概念

      Quartz对任务调度进行了高度抽象,提出了3个核心概念,并在org.quartz包中通过接口和类进行了描述。

      任务:就是执行的工作内容。Quartz提供Job接口来支持任务定义

      触发器:定义触发Job执行的时间触发规则。Quartz提供Trigger类及其子类支持触发器功能,

      调度器:Quartz提供了Scheduler接口,将工作任务和触发器绑定,保证任务可以在正确的时间执行

    Quartz框架的使用流程

      在系统中,对员工张三的工作任务进行提醒,实现每3秒钟进行一次任务提醒,定时器在10秒钟后关闭。

     

    案例流程如下:

      1.引入jar包

      

      2.创建实体类

      

      3.创建service

      

    public class RemindService {
    
        
        //创建集合,书写内容
        public List<Plan> getPlayToday(){
            
            List<Plan> list=new ArrayList<Plan>();
            
            Plan plan1=new Plan("12月17日", "快回家了!!!");
            Plan plan2=new Plan("12月18日", "这是真的!!!");
            
            list.add(plan1);
            list.add(plan2);
            
            return list;
        }
        
        //打印计划的时间与内容
        public void plintMessage(){
            List<Plan> list=getPlayToday();
            for (Plan plan : list) {
                System.out.println("计划的时间:"+plan.getDate()+"计划的内容:"+plan.getTask());
            }
            
        }
        
        
    }

      4.创建quartz

    public class RemindJob implements Job {
    
        //植入service
        private RemindService service = new RemindService();
        
        @Override
        public void execute(JobExecutionContext arg0) throws JobExecutionException {
            service.plintMessage();
        }
    
        
        public RemindService getService() {
            return service;
        }
    
        public void setService(RemindService service) {
            this.service = service;
        }
        
    }

      5.测试类:

    public class MyQuertzTest {
        
        public static void tool() throws Exception{
            
            //创建job
            JobDetail job = JobBuilder.newJob(RemindJob.class)//
                    .withIdentity("job1", "group1").build();
            
            //构建trigger
            /* CronTrigger trigger = TriggerBuilder.newTrigger().//
                     withIdentity("trigger1", "group1").//
                     withSchedule(CronScheduleBuilder.cronSchedule("0 40 18 ? * 7#3 2016"))
                     .build();  */
    
            Trigger trigger = TriggerBuilder.newTrigger() 
                     .withIdentity("myTrigger", "myTriggerGroup")
                     .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                         .withIntervalInSeconds(60)
                         .repeatForever())
                     .startAt(new Date(System.currentTimeMillis()))
                     .build();
            
            //创建调度者工厂
            SchedulerFactory sfc = new StdSchedulerFactory();
            //创建一个调度者
            Scheduler sched=sfc.getScheduler();    
            //注册并进行调度
            sched.scheduleJob(job, trigger);
            sched.start();
            //Thread.sleep(3000);
            
        }
        
        public static void main(String[] args)  {
            try {
                tool();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    使用CronTrigger(特定时间,特定操作)

    CronTrigger也是Trigger的子类

    CronTriggerSimpleTrigger的对比:

    CronTrigger允许用户更精准地控制任务的运行日期和时间,而不仅仅是定义工作的频度

    CronTrigger通过Cron表达式定义准确的运行时间点。创建CronTrigger的语法如下:

     


     Cron表达式

     要使用CronTrigger,必须掌握Cron表达式

     Cron表达式由6~7个由空格分隔的时间元素组成。第7个元素可选 

     

    Cron表达式有几个特殊的字符,说明如下:

    Cron表达式案例:


    每天都要有自己的任务,好比quartz和Cron一样。

                 -----  告诫自己

  • 相关阅读:
    【重磅资料】ArchSummit全球架构师峰会·2019华为云技术专场资料下载
    00074_Array类
    JSP中RequestDispatcher的用法
    最近6个月的感受
    java大文件(百M以上)的上传下载功能
    java大文件(百M以上)的上传下载解决方案
    java大文件(百M以上)的上传下载方案
    java大文件(百M以上)的上传下载技术
    wangEditor
    umeditor
  • 原文地址:https://www.cnblogs.com/hq-123/p/6195080.html
Copyright © 2011-2022 走看看