zoukankan      html  css  js  c++  java
  • quartz学习笔记(一)简单入门

    前言

    quartz是Java编写的一款开源的任务调度开发框架,在项目开发中很多场景都可以用到,比如订单超期自动收货。

    所谓程序源于生活,生活中也有很多场景可以用quartz来模拟,比如工作日早上七点起床,再比如,每天八杯水,

    隔一小时一杯,在这里我就根据这两个例子来给大家初步介绍quartz。

    粗糙类图+流程介绍

    1.简要画一下quartz大致结构,画的不好,还望见谅:)

    2.使用quartz开发,首先得知道自己的需要去完成的任务,quartz提供一个Job接口,只要实现它的execute()方法即可,然后创建调度工厂拿到调度实例,

    设置好触发器,将任务和触发器加入到调度中即可,具体实现请参考后续代码。

    编码实现

    开发环境

    • gradle 4.1
    • quartz 2.2.1
    • jdk1.7

    新建gradle项目

    group 'com.haq.quartz'
    version '1.0-SNAPSHOT'
    
    apply plugin: 'java'
    
    sourceCompatibility = 1.7
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        compile group: 'org.quartz-scheduler', name: 'quartz', version: '2.2.1'
        compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.21'
        compile group: 'ch.qos.logback', name: 'logback-core', version: '1.1.7'
        compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.1.7'
        testCompile group: 'junit', name: 'junit', version: '4.12'
    }
    

     创建quartz配置文件quartz.properties

     1 #============================================================================
     2 #   Scheduler configration
     3 #============================================================================
     4 org.quartz.scheduler.instanceName = MyScheduler
     5 org.quartz.scheduler.instanceId = AUTO
     6 
     7 org.quartz.scheduler.skipUpdateCheck: true
     8 
     9 #============================================================================
    10 # jobstore configration
    11 #============================================================================
    12 org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore
    13 #==============================================================
    14 # threadPool configuration
    15 #==============================================================
    16 #org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
    17 org.quartz.threadPool.threadCount = 10
    18 #org.quartz.threadPool.threadPriority = 5
    19 #org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

    新建任务类

    分别创建MorningJob和DrinkJob

     1 package com.haq.quartz.job;
     2 
     3 import org.quartz.Job;
     4 import org.quartz.JobExecutionContext;
     5 import org.quartz.JobExecutionException;
     6 import org.slf4j.Logger;
     7 import org.slf4j.LoggerFactory;
     8 
     9 import java.util.Date;
    10 
    11 public class DrinkJob implements Job {
    12 
    13     private static final Logger log = LoggerFactory.getLogger(DrinkJob.class);
    14 
    15     @Override
    16     public void execute(JobExecutionContext context) throws JobExecutionException {
    17         log.info(new Date() + "  hey! it is time to drink some water!");
    18     }
    19 
    20 }
     1 package com.haq.quartz.job;
     2 
     3 import org.quartz.Job;
     4 import org.quartz.JobExecutionContext;
     5 import org.quartz.JobExecutionException;
     6 import org.quartz.JobKey;
     7 import org.slf4j.Logger;
     8 import org.slf4j.LoggerFactory;
     9 
    10 import java.util.Date;
    11 
    12 public class MorningJob implements Job {
    13 
    14     private static final Logger log = LoggerFactory.getLogger(MorningJob.class);
    15 
    16     @Override
    17     public void execute(JobExecutionContext context) throws JobExecutionException {
    18         log.info(new Date() + "  Morning , it is time to get up!");
    19     }
    20 }

    创建调度类 TestSchedule

     1 package com.haq.quartz.schedule;
     2 
     3 import com.haq.quartz.job.DrinkJob;
     4 import com.haq.quartz.job.MorningJob;
     5 import org.quartz.*;
     6 import org.quartz.impl.StdSchedulerFactory;
     7 
     8 
     9 public class TestSchedule {
    10     public static void main(String[] args) throws SchedulerException, InterruptedException {
    11         SchedulerFactory sf = new StdSchedulerFactory();
    12 
    13         Scheduler scheduler = sf.getScheduler();
    14         JobDetail drinkjob = JobBuilder.newJob(DrinkJob.class)
    15                 .withIdentity("drinkjob", "group1")
    16                 .build();
    17         Trigger drinktrgger = TriggerBuilder.newTrigger()
    18                 .withIdentity("drinktrgger", "group1")
    19                 .startNow()
    20                 .withSchedule(SimpleScheduleBuilder.simpleSchedule()
    21 //                                    .withIntervalInHours(1)  为方便测试,改为5秒执行一次
    22                         .withIntervalInSeconds(5)
    23                         .withRepeatCount(8))
    24                 .build();
    25 
    26 
    27 
    28         JobDetail morningjob = JobBuilder.newJob(MorningJob.class)
    29                 .withIdentity("morningjob", "group1")
    30                 .build();
    31         Trigger morningtrgger = TriggerBuilder.newTrigger()
    32                 .withIdentity("morningtrgger", "group1")
    33                 .startNow()
    34                 .withSchedule(DailyTimeIntervalScheduleBuilder.dailyTimeIntervalSchedule()
    35 //                                    .onMondayThroughFriday() 为方便测试将时间调整为当前时间
    36                         .onSaturdayAndSunday()
    37                         .startingDailyAt(new TimeOfDay(12,35,0))
    38                         .withRepeatCount(5))
    39                 .build();
    40 
    41 
    42         scheduler.scheduleJob(drinkjob, drinktrgger);
    43         scheduler.scheduleJob(morningjob, morningtrgger);
    44 
    45         scheduler.start();
    46 
    47         Thread.sleep(90L * 1000L);
    48 
    49         scheduler.shutdown();
    50     }
    51 }

    运行结果如下:

    源码下载:

    https://github.com/xiaodongio/quartz_learning/tree/day1

      

    作者: 采采灬卷耳

    <http://www.cnblogs.com/floay/>

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 欢迎咨询。

  • 相关阅读:
    CVS,GIT,Mercurial和SVN比较
    ubuntu-使用终端配置网络
    编写简单的hashCode方法
    编写高质量equals方法
    文件上传和下载
    Java常用命令
    增删查改-MySQL
    Newton迭代法-C++
    二分法-C++
    适配器模式
  • 原文地址:https://www.cnblogs.com/floay/p/7435043.html
Copyright © 2011-2022 走看看