zoukankan      html  css  js  c++  java
  • quzrtz的使用

    Quartz是一个大名鼎鼎的Java版开源定时调度器,功能强悍,使用方便。

    一、核心概念

    1.Job

    表示一个工作,要执行的具体内容,此接口只有一个方法

    void execute(JobExecutionContext context)

    2.JobDetail

    JobDetail表示一个具体的可以执行的调度程序,Job是这个可以执行程序所要执行的内容内容,JobDetail包含这个任务调度的方案和策略。

    3.Trigger代表一个调度参数的配置,什么时候去调。

    4.Schedule代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger,当JobDetail和Trigger组合就可以被容器调度。

    二:例子:

     1    public static void main(String[] args) {
     2         try {
     3             //创建scheduler
     4             Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
     5 
     6             //定义一个Trigger
     7             Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1") //定义name/group
     8                     .startNow()//一旦加入scheduler,立即生效
     9                     .withSchedule(simpleSchedule() //使用SimpleTrigger
    10                             .withIntervalInSeconds(1) //每隔一秒执行一次
    11                             .repeatForever()) //一直执行,奔腾到老不停歇
    12                     .build();
    13 
    14             //定义一个JobDetail
    15             // 创建一个JobDetail实例,此版本JobDetail已经作为接口(interface)存在,通过JobBuilder创建
    16             // 并指定Job在Scheduler中所属组及名称
    17           //  JobDetail jobDetail = JobBuilder.newJob(MyJob.class).withIdentity("job1","group1").build();
    18             JobDetail job = JobBuilder.newJob(MyJob.class) //定义Job类为HelloQuartz类,这是真正的执行逻辑所在
    19                     .withIdentity("job1", "group1") //定义name/group
    20                     .usingJobData("name", "quartz") //定义属性
    21                     .build();
    22 
    23             //加入这个调度
    24             scheduler.scheduleJob(job, trigger);
    25 
    26             //启动之
    27             scheduler.start();
    28 
    29             //运行一段时间后关闭
    30             Thread.sleep(10000);
    31             scheduler.shutdown(true);
    32         } catch (Exception e) {
    33             e.printStackTrace();
    34         }
    35     }
    简单例子
    package quartz;
    
    import org.quartz.*;
    
    import java.util.Date;
    
    /**
     * @author
     * @create 2017-12-12 10:49
     **/
    public class MyJob implements Job{
    
        public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
            // JobExecutionContext类提供了调度上线问的各种信息,为JobDetail和Trigger提供必要的信息
            // JobKey是由name和group组成,并且name必须在group内是唯一的。如果只指定一组则将使用默认的组名。
            JobDetail detail = jobExecutionContext.getJobDetail();
            String name = detail.getJobDataMap().getString("name");
            System.out.println("hello " + name + "--- " + new Date());
    
            /**
             * JobDetail detail = context.getJobDetail();
             String name = detail.getJobDataMap().getString("name");
             System.out.println("say hello to " + name + " at " + new Date());
             */
        }
    }
    View Code

     上面例子很好的展示的Quartz的三个要素

    • Scheduler:调度器。所有的调度都是由它控制。
    • Trigger: 定义触发的条件。例子中,它的类型是SimpleTrigger,每隔1秒中执行一次(什么是SimpleTrigger下面会有详述)。
    • JobDetail & Job: JobDetail 定义的是任务数据,而真正的执行逻辑是在Job中,例子中是HelloQuartz。 为什么设计成JobDetail + Job,不直接使用Job?这是因为任务是有可能并发执行,如果Scheduler直接使用Job,就会存在对同一个Job实例并发访问的问题。而JobDetail & Job 方式,sheduler每次执行,都会根据JobDetail创建一个新的Job实例,这样就可以规避并发访问的问题。
  • 相关阅读:
    2017-3-31 操作属性 定时器 操作内容 操作相关元素 元素创建添加删除
    2017-3-30 Js实现导航栏,选项卡,图片轮播的制作
    2017-3-30 DOM查找元素 点击,鼠标移入,移除事件 样式控制
    Js产生随机数的几种方法
    2017-3-29 Js语法 DOM操作
    纯【css下拉菜单】
    2017-3-25 css样式表 去除按钮点点击是的绿色边框
    2017-3-23 网页中的表单 框架 标题栏小图标 描点 插入视频音频 简单的滚动条 css样式表
    【2017-2-21】C#分支语句,分支嵌套,变量的作用域
    【2017-2-20】C#运算符
  • 原文地址:https://www.cnblogs.com/java-gaolei/p/8027883.html
Copyright © 2011-2022 走看看