前言

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

 #============================================================================
# Scheduler configration
#============================================================================
org.quartz.scheduler.instanceName = MyScheduler
org.quartz.scheduler.instanceId = AUTO org.quartz.scheduler.skipUpdateCheck: true #============================================================================
# jobstore configration
#============================================================================
org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore
#==============================================================
# threadPool configuration
#==============================================================
#org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
#org.quartz.threadPool.threadPriority = 5
#org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

新建任务类

分别创建MorningJob和DrinkJob

 package com.haq.quartz.job;

 import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.util.Date; public class DrinkJob implements Job { private static final Logger log = LoggerFactory.getLogger(DrinkJob.class); @Override
public void execute(JobExecutionContext context) throws JobExecutionException {
log.info(new Date() + " hey! it is time to drink some water!");
} }
 package com.haq.quartz.job;

 import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.util.Date; public class MorningJob implements Job { private static final Logger log = LoggerFactory.getLogger(MorningJob.class); @Override
public void execute(JobExecutionContext context) throws JobExecutionException {
log.info(new Date() + " Morning , it is time to get up!");
}
}

创建调度类 TestSchedule

 package com.haq.quartz.schedule;

 import com.haq.quartz.job.DrinkJob;
import com.haq.quartz.job.MorningJob;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory; public class TestSchedule {
public static void main(String[] args) throws SchedulerException, InterruptedException {
SchedulerFactory sf = new StdSchedulerFactory(); Scheduler scheduler = sf.getScheduler();
JobDetail drinkjob = JobBuilder.newJob(DrinkJob.class)
.withIdentity("drinkjob", "group1")
.build();
Trigger drinktrgger = TriggerBuilder.newTrigger()
.withIdentity("drinktrgger", "group1")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
// .withIntervalInHours(1) 为方便测试,改为5秒执行一次
.withIntervalInSeconds(5)
.withRepeatCount(8))
.build(); JobDetail morningjob = JobBuilder.newJob(MorningJob.class)
.withIdentity("morningjob", "group1")
.build();
Trigger morningtrgger = TriggerBuilder.newTrigger()
.withIdentity("morningtrgger", "group1")
.startNow()
.withSchedule(DailyTimeIntervalScheduleBuilder.dailyTimeIntervalSchedule()
// .onMondayThroughFriday() 为方便测试将时间调整为当前时间
.onSaturdayAndSunday()
.startingDailyAt(new TimeOfDay(12,35,0))
.withRepeatCount(5))
.build(); scheduler.scheduleJob(drinkjob, drinktrgger);
scheduler.scheduleJob(morningjob, morningtrgger); scheduler.start(); Thread.sleep(90L * 1000L); scheduler.shutdown();
}
}

运行结果如下:

源码下载:

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

  

quartz学习笔记(一)简单入门的更多相关文章

  1. SpringMVC学习笔记之---简单入门

    SpringMVC简单入门 (一)什么是MVC设计模式 (1)model:模型数据,业务逻辑 (3)view:呈现模型,与用户进行交互 (3)controller:负责接收并处理请求,响应客户端 (二 ...

  2. AngularJS学习笔记一:简单入门

    阿里云网站的前端是AngularJS实现的. 先下载AngularJS的开发工具包,我下载的angular-1.4.0. 在合适位置引入js文件: <script src="angul ...

  3. Hadoop学习笔记(1) ——菜鸟入门

    Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序. ...

  4. Quartz学习笔记:集群部署&高可用

    Quartz学习笔记:集群部署&高可用 集群部署 一个Quartz集群中的每个节点是一个独立的Quartz应用,它又管理着其他的节点.这就意味着你必须对每个节点分别启动或停止.Quartz集群 ...

  5. Quartz学习笔记:基础知识

    Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...

  6. tensorflow学习笔记二:入门基础 好教程 可用

    http://www.cnblogs.com/denny402/p/5852083.html tensorflow学习笔记二:入门基础   TensorFlow用张量这种数据结构来表示所有的数据.用一 ...

  7. JSP学习笔记(三):简单的Tomcat Web服务器

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  8. iOS学习笔记-地图MapKit入门

    代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...

  9. JAVA WEB学习笔记(三):简单的基于Tomcat的Web页面

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  10. Spark学习笔记0——简单了解和技术架构

    目录 Spark学习笔记0--简单了解和技术架构 什么是Spark 技术架构和软件栈 Spark Core Spark SQL Spark Streaming MLlib GraphX 集群管理器 受 ...

随机推荐

  1. Jsp注册页面身份证验证

    <!--身份证验证 --><script type="text/javascript">function isCardNo(Idcardnumber) { ...

  2. Office365开发系列——开发一个全功能的Word Add-In

    2016年10月我参加了在北京举行的DevDays Asia 2016 - Office 365应用开发”48小时黑客马拉松“,我开发的一个Word Add-In Demo——WordTemplate ...

  3. 架构之路 之 Nginx实现负载均衡

    [前言] 在大型网站中,负载均衡是有想当必要的.尤其是在同一时间访问量比较大的大型网站,例如网上商城,新闻等CMS系统,为了减轻单个服务器的处理压力,我们引进了负载均衡这一个概念,将一个服务器的压力分 ...

  4. nyoj_118:修路方案(次小生成树)

    题目链接 题意,判断次小生成树与最小生成树的权值和是否相等. 豆丁文档-- A-star和第k短路和次小生成树和Yen和MPS寻路算法 法一: 先求一次最小生成树,将这棵树上的边加入一个向量中,再判断 ...

  5. SLAM中的优化理论(一)—— 线性最小二乘

    最近想写一篇系列博客比较系统的解释一下 SLAM 中运用到的优化理论相关内容,包括线性最小二乘.非线性最小二乘.最小二乘工具的使用.最大似然与最小二 乘的关系以及矩阵的稀疏性等内容.一方面是督促自己对 ...

  6. Java设计模式学习笔记,一:单例模式

    开始学习Java的设计模式,因为做了很多年C语言,所以语言基础的学习很快,但是面向过程向面向对象的编程思想的转变还是需要耗费很多的代码量的.所有希望通过设计模式的学习,能更深入的学习. 把学习过程中的 ...

  7. Java映射

    1.Student类 package com.zdsofe.javaweb.lianxi1; public class Student { public String stuName; private ...

  8. webpack2 项目

    webpack2 项目   实例gif图: 目录截图: 目录介绍: dist目录(最后生成的目录,里面文件为配置webpack自动生成的): c/:css文件夹; i/:img文件夹; j/:js文件 ...

  9. Android常用布局、文件存储与权限、XML

    常用的布局 LinearLayout Android 2.2开始fill_parent改名为match_parent ,从API Level为8开始我们可以直接用match_parent来代替fill ...

  10. [技术]浅谈c++ this指针

    背景 matrix operator*=(const matrix &a){ *this=*this*a; return *this; } XXX:诶,你这个*this是什么啊,是指针吗 博主 ...