前言

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. SQL Server 2008R2的安装

    一.安装前的准备工作:SQL Server 200R2安装包 二.SQL Server2008R2的安装 1.打开SQL Server2008R2的安装包,找到setup.exe 2.双击sql se ...

  2. Mac终端查看sqlite3数据库、表数据等

    背景: 我们在用FMDB处理iOS数据库时,沙盒里保存的数据库格式为.sqlite3. 当我们需要在模拟器上调试或查看数据库内容时,我们可以直接在终端里查看到. 正文: 1.在沙盒路径找到需要查看到文 ...

  3. 走进json

    纯做笔记,请多指教... 1,json格式: 非数组: {"key" : "value"} 数组:[{"key" : "value ...

  4. electron入门代码

    Electron 提供了一个实时构建桌面应用的纯 JavaScript 环境.Electron 可以获取到你定义在 package.json 中 main 文件内容,然后执行它.通过这个文件(通常我们 ...

  5. (转)上传jar包到nexus私服

    场景:在使用私服Nexus时候经常需要上传jar包,但是对上传jar包的方式不是很熟悉,所以很有必要学习下. 1 通过网页上传 GAV Definition:选择GAV Parameters 输入JA ...

  6. HDU1113 Word Amalgamation

    Description In millions of newspapers across the United States there is a word game called Jumble. T ...

  7. global,$GLOBALS[' '] 全局, 浮动float跟margin的注意事项

    $a; global只能声明变量为全局,不能赋值,否则报错未定义:global $a; 相对于$GLOBALS['a'],写法是这样的,所有定义过的变量都存在这里: //浮动float跟margin的 ...

  8. vue-cli的webpack模板项目配置文件分析

    由于最近在vue-cli生成的webpack模板项目的基础上写一个小东西,开发过程中需要改动到build和config里面一些相关的配置,所以刚好趁此机会将所有配置文件看一遍,理一理思路,也便于以后修 ...

  9. springMVC 中几种获取request和response的方式

    1.最简单方式:参数 例如: @RequestMapping("/test") @ResponseBody public void saveTest(HttpServletRequ ...

  10. 使用ide编程时候 不知为何突然光标变宽,如何恢复成原有的细竖光标

    各位朋友们, 你们在编程时候有没有这样的情况: 码着码着,突然不知什么原因,光标变成这样了: 这种宽的光标,不知道怎么调都调不回去,而且网上也没有类似的问题描述 就对我们编程极其不便(因为这种光标是操 ...