zoukankan      html  css  js  c++  java
  • Quartz入门教程

    Quartz是开源的作业调度框架,使你能在预定义的日期和时间运行任务。

    Quartz 1.6

    Quartz是强大和先进的调度框架,帮助Java开发者在指定的日期和时间运行调度作业。
    本教程教你使用Quartz 1.6.3开发调度作业。

    本示例有点过时,新版Quartz版本为 2.2.3。

    1. 下载Quartz
      可以从官网上下载Quartz,或者从Maven中央仓库。
      pom.xml文件内容:
    <dependencies>
        <!-- Quartz API -->
        <dependency>
            <groupId>opensymphony</groupId>
            <artifactId>quartz</artifactId>
            <version>1.6.3</version>
        </dependency>
    
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2.1</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>
    
    1. Quartz作业
      Quartz作业定义了你要运行什么任务。
      HelloJob.java文件
    public class HelloJob implements Job {
        public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
            System.out.println("Hello Quartz!");
        }
    }
    
    1. Quartz触发器
      Quartz触发器定义了Quartz何时执行你上面定义的的Quartz作业。
      有两种类型的Quartz触发器:
      SimpleTrigger - 可以设置开始时间、结束时间和重复间隔。
      CronTrigger - 可以使用Unix cron表达式指定日期和时间执行定义的工作。
      Unix cron表达式:
      Unix cron表达式具有高灵活性且功能强大,可以通过以下网址学习cron表达式。
      http://en.wikipedia.org/wiki/CRON_expression
      http://www.quartz-scheduler.org/docs/examples/Example3.html
      SimpleTrigger - 每3秒执行一次
    SimpleTrigger trigger = new SimpleTrigger();
    trigger.setName("dummyTriggerName");
    trigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
    trigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
    trigger.setRepeatInterval(3000);
    

    CronTrigger - 每3秒执行一次

    CronTrigger trigger = new CronTrigger();
    trigger.setName("dummyTriggerName");
    trigger.setCronExpression("0/3 * * * * ?");
    
    1. 调度器
      调度器类把Job(作业)和Trigger(触发器)连接在一起并执行。
    Scheduler scheduler = new StdSchedulerFactory().getScheduler();
    scheduler.start();
    scheduler.scheduleJob(job, trigger);
    
    1. 完整代码
      这里有两个使用Quartz完整例子,分别使用了SimpleTrigger和CronTrigger。
      SimpleTrigger实例
      每3秒执行一次,延时1秒
    public class SimpleTriggerExample {
        public static void main(String[] args) throws SchedulerException {
            JobDetail job = new JobDetail();
            job.setName("dummyJobName");
            job.setJobClass(HelloJob.class);
    
            // configure the scheduler time
            SimpleTrigger trigger = new SimpleTrigger();
            trigger.setName("dummyTriggerName");
            trigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
            trigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
            trigger.setRepeatInterval(3000);
    
            // schedule it
            Scheduler scheduler = new StdSchedulerFactory().getScheduler();
            scheduler.start();
            scheduler.scheduleJob(job, trigger);
        }
    }
    

    CronTrigger实例

    public class CronTriggerExample {
        public static void main(String[] args) throws SchedulerException, ParseException {
            JobDetail job = new JobDetail();
            job.setName("dummyJobName");
            job.setJobClass(HelloJob.class);
    
            // configure the scheduler time
            CronTrigger trigger = new CronTrigger();
            trigger.setName("dummyTriggerName");
            trigger.setCronExpression("0/3 * * * * ?");
    
            // schedule it
            Scheduler scheduler = new StdSchedulerFactory().getScheduler();
            scheduler.start();
            scheduler.scheduleJob(job, trigger);
        }
    }
    

    Quartz 2

    JobListener -- 创建监听类以跟踪正在运行的工作状态

    Multiple Jobs -- 声明和运行多个工作

    List All Jobs -- 列举所有存在的工作

    Trigger A Quartz Job Manually -- JSF2示例,显示所有工作并手动触发特定的工作

    如果觉得本文对您有帮助,请“打赏”,谢谢。
    您的鼓励,我的动力。
    微信 支付宝
  • 相关阅读:
    求CRC校验和的低位和高位的两种方式
    求数组的长度 C
    C语言判断文件是否存在(转)
    Android使用JNI实现Java与C之间传递数据(转)
    字节流、字符串、16进制字符串转换__Java(转)
    字符串参数传递与返回值(转)
    JNI数据类型(转)
    十进制的数转换成十六进制的数 (转)
    C语言字符串长度(转)
    字符串截取函数--C语言(转)
  • 原文地址:https://www.cnblogs.com/zongzhankui/p/5903642.html
Copyright © 2011-2022 走看看