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 集群管理器 受 ...
随机推荐
- iOS 图文并茂的带你了解深拷贝与浅拷贝
一.概念与总结 1.浅拷贝 浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间,当内存销毁的时候,指向这片内存的几个指针需要重新定义才可以使用,要不然会成为野指针. 浅拷贝就是拷贝指 ...
- Android-Bluetooth Low Energy(BLE)
Android Bluetooth Low Energy Android 低功耗蓝牙简介 2016-4-18 Android4.3(API 18)介绍了平台支持的低功耗蓝牙,app可用于发现设备,检索 ...
- AddDigitsTotal - 把数字中单个数相加
给定一个int数字,把数字中的单个数相加起来:得到的结果如果不是个位数,继续相加 如给定 19,执行1+9 = 10 --> 1 + 0 = 1 返回1 给定22,返回4 思路很简单,把各个位 ...
- Python基础之常用模块(三)
1.configparser模块 该模块是用来对文件进行读写操作,适用于格式与Windows ini 文件类似的文件,可以包含一个或多个节(section),每个节可以有多个参数(键值对) 配置文件的 ...
- 回味Python2.7——笔记1
一.基本知识 1.一个值可以同时赋给几个变量: >>> x = y = z = 0 # Zero x, y and z >>> x 0 >>> y ...
- UglifyJS-- 对你的js做了什么
也不是闲着没事去看压缩代码,但今天调试自己代码的时候发现有点意思.因为是自己写的,虽然压缩了,格式化之后还是很好辨认.当然作为min的首要准则不是可读性,而是精简.那么它会尽量的缩短代码,尽量的保持一 ...
- 【css】盒子模型 之 概述
摘要 一些基本的概念以及常见使用问题 概述 BFC 是css 中布局的核心 - 盒模型,根据块级元素及行级元素可分为块级容器, 行级容器,但容器内部都遵循 BFC BFC 空间布局 备注: IE 的盒 ...
- 【firefox】关闭firefox缓存
在Firefox中关闭缓存 看看这里 在地址栏输入:about:config 然后在过滤器中输入:browser.cache.disk.enable 解释:When a page is loaded, ...
- JSP制作简单登陆
JSP制作简单登陆界面 运行环境 eclipse+tomcat+MySQL 不知道的可以参考Jsp运行环境--Tomcat 项目列表 这里我先把jsp文件先放在Web-INF外面访问 需要建立的几个文 ...
- webpack模块解析
前面的话 在web存在多种支持JavaScript模块化的工具(如requirejs和r.js),这些工具各有优势和限制.webpack基于从这些系统获得的经验教训,并将模块的概念应用于项目中的任何文 ...