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
#============================================================================
# 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学习笔记(一)简单入门的更多相关文章
- SpringMVC学习笔记之---简单入门
SpringMVC简单入门 (一)什么是MVC设计模式 (1)model:模型数据,业务逻辑 (3)view:呈现模型,与用户进行交互 (3)controller:负责接收并处理请求,响应客户端 (二 ...
- AngularJS学习笔记一:简单入门
阿里云网站的前端是AngularJS实现的. 先下载AngularJS的开发工具包,我下载的angular-1.4.0. 在合适位置引入js文件: <script src="angul ...
- Hadoop学习笔记(1) ——菜鸟入门
Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序. ...
- Quartz学习笔记:集群部署&高可用
Quartz学习笔记:集群部署&高可用 集群部署 一个Quartz集群中的每个节点是一个独立的Quartz应用,它又管理着其他的节点.这就意味着你必须对每个节点分别启动或停止.Quartz集群 ...
- Quartz学习笔记:基础知识
Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...
- tensorflow学习笔记二:入门基础 好教程 可用
http://www.cnblogs.com/denny402/p/5852083.html tensorflow学习笔记二:入门基础 TensorFlow用张量这种数据结构来表示所有的数据.用一 ...
- JSP学习笔记(三):简单的Tomcat Web服务器
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
- iOS学习笔记-地图MapKit入门
代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...
- JAVA WEB学习笔记(三):简单的基于Tomcat的Web页面
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
- Spark学习笔记0——简单了解和技术架构
目录 Spark学习笔记0--简单了解和技术架构 什么是Spark 技术架构和软件栈 Spark Core Spark SQL Spark Streaming MLlib GraphX 集群管理器 受 ...
随机推荐
- C++强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast
1. c强制转换与c++强制转换 c语言强制类型转换主要用于基础的数据类型间的转换,语法为: (type-id)expression//转换格式1 type-id(expression)//转换格式2 ...
- “玲珑杯”ACM比赛 Round #18--最后你还是AK了(搜索+思维)
题目链接 DESCRIPTION INPUT OUTPUT SAMPLE INPUT 1 4 2 1 2 5 2 3 5 3 4 5 5 5 SAMPLE OUTPUT 35 HINT 对于样例, ...
- shell脚本中字符串的常见操作及"command not found"报错处理(附源码)
简介 昨天在通过shell脚本实现一个功能的时候,由于对shell处理字符串的方法有些不熟悉导致花了不少时间也犯了很多错误,因此将昨日的一些错误记录下来,避免以后再犯. 字符串的定义与赋值 # 定义S ...
- 关于前端的photoshop初探的学习笔记
写在前边 这还是高三的时候暑假的时候学习这个软件时记的笔记呢,今天又在电脑上找到了它,总觉得不应该让他尘封在我的硬盘上,于是挂了出来.温馨提示:比较乱,写给自己看的,看不下去,按ctrl+W 笔记内容 ...
- VerilogHDL可综合设计的注意事项
可综合的语法已经记录得差不多了,剩下一些遗留的问题,在这里记录一下吧. 一.逻辑设计 (1)组合逻辑设计 下面是一些用Verilog进行组合逻辑设计时的一些注意事项: ①组合逻辑可以得到两种常用的RT ...
- github 发布项目
自己开发了一个插件或项目,需要发布到github上,之前看到很多文章,但是都会有一些问题,经过自己多次尝试,想分享给初学者们. 首先你需要一个github账号,所有还没有的话先去注册吧! 官网:htt ...
- 框架 之 -------Spring
目录一.Spring工作原理 二.为什么要用Spring三.请你谈谈SSH整合四.介绍一下Spring的事务管理五.什么是依赖注入,依赖注入的作用是什么? 六.什么是AOP,AOP的作用是什么? 七. ...
- vscode--搭建自动编译sass环境
一,安装插件及使用步骤 1.vscode安装Live Sass Compiler,由于该插件依赖Live Server ,所以会自动安装Live Server 2.点击vscode底部的Watch m ...
- HTML5——JSON的方法实现对象copy
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言 ...
- akoj-1059-Picture
Description 给你一个矩形的宽度和高度,要求按sample output样例输出此矩形. Input 输入包含多组数据,每一组包含两个数N和M( 0 < N ,M , < 75 ...