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

    一、任务调度概述

    在企业级应用中,经常会制定一些“计划任务”,即在某个时间点做某件事情,核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作,任务调度涉及多线程并发、线程池维护、运行时间规则解析、运行现场的保护以恢复等方面。Quartz框架是一个开源的企业级任务调度服务,已经被作为任务调度的良好解决方案


    二、Quartz框架核心概念

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

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

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

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


    三、Quartz框架的使用流程

    案例:

    从当前时间开始执行一个特定操作 

    ①:引入jar文件

    ②:创建entity实体层定义任务的模板

    ③:定制一个泛型集合用户存储多个Plan对象,提供一个方法读取该泛型集合中的data

    ④:提醒业务类

    ⑤:真正的任务对象和触发器对象

    步骤一:

    步骤二:Plan实体类,并有对应的时间和任务内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public class Plan {
        //时间
        private String date;
         
        //任务
        private String task;
         
        @Override
        public String toString() {
            return "Plan [date=" + date + ", task=" + task + "]";
        }
     
         
        public Plan() {
        }
     
        public Plan(String date, String task) {
            super();
            this.date = date;
            this.task = task;
        }

    步骤三:定义Service,创建集合,遍历

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public class RemindService {
     
        //创建一个集合,并且方法返回值是一个集合类型
        public List<Plan> getPlans(){
            List<Plan> list=new ArrayList<Plan>();
         
            Plan p1=new Plan("2016年12月17日","计划一");
            Plan p2=new Plan("2016年12月18日","计划二");
             
            list.add(p1);
            list.add(p2);
            return list;
             
        }
         
        //用来打印集合中提醒内容的方法
        public void printMessage(){
            List<Plan> list= getPlans();
            for (Plan plan : list) {
                System.out.println("计划的时间:"+plan.getDate()+" "+"计划内容:"+plan.getTask());
            }
        }
    }

    步骤四:创建Quartz层,提醒业务类,实现Job接口,并植入Service对象

     

    步骤五:构建Job、Trigger,并绑定Job和Trigger

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
        public static void tool() throws Exception{
              //构建Job
             JobDetail job = JobBuilder.newJob(RemindJob.class)
                             .withIdentity("job1""group1").build();
              
             //构建Trigger
            Date runTime = DateBuilder.evenMinuteDate(new Date(System.currentTimeMillis()));
            Trigger trigger = TriggerBuilder.newTrigger()
                    .withIdentity("trigger1""group1")
                    .startAt(runTime).build();
        
            //绑定Job和Trigger
            //创建调度者工厂
            SchedulerFactory sf = new StdSchedulerFactory();
            //创建一个调度者
            Scheduler sched = sf.getScheduler();
           //注册并进行调度
            sched.scheduleJob(job,trigger);
           //启动调度
            sched.start();
             
            /*Thread.sleep(3000);
            sched.shutdown();*/
        }
         
         
    public static void main(String[] args) throws Exception {
        tool();
        System.out.println("你猜");
    }
    }

     


    每隔一段时间执行一次操作

     


    在特殊时间执行某次操作

     使用CronTrigger

    CronTrigger也是Trigger的子类

    CronTriggerSimpleTrigger的对比:

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

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

     


    四、Cron表达式

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

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

     

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

    Cron表达式案例:

    示例:

  • 相关阅读:
    Oracle数据库的经典问题 snapshot too old是什么原因引起的
    在服务器上排除问题的头五分钟
    MySQL的redo log结构和SQL Server的log结构对比
    MySQL优化---DBA对MySQL优化的一些总结
    事务分类
    扩展HT for Web之HTML5表格组件的Renderer和Editor
    iOS平台快速发布HT for Web拓扑图应用
    HT for Web的HTML5树组件延迟加载技术实现
    Zip 压缩、解压技术在 HTML5 浏览器中的应用
    百度地图、ECharts整合HT for Web网络拓扑图应用
  • 原文地址:https://www.cnblogs.com/hehheai/p/6506782.html
Copyright © 2011-2022 走看看