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# Web.config配置
使用 <!--M002 バッチを起動のPath配置--> <add key="BM0002_START_PATH" value="D:\BM0002\B ...
- IntentService与Service的区别
IntentService是继承并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动IntentService的方式和启动传统的Service一样,同时,当任务执行 ...
- Android - 读取XML文件中的数据
读取XML中存储的数据.将xmlfile.xml存放在assets文件夹中.在activity_main.xml中创建一个textview,用来显示读取到的数据. XML文件内容如下:xmlfile. ...
- pyqt5 在qt designer后以弹窗的方式连接多个UI图形界面
当我们通过pyqt开发时,eric6为我们提供了一个方便的工具:图形化的绘制UI工具--qt designer. 我们可以通过它开发多个UI,然后利用信号-槽工具,将功能代码附着在上面.也可以将多个界 ...
- Ajax获取服务器信息
xhr.onreadystatechange = function(){ if (xhr.readyState == 4){ if ((xhr.status >= 200 && ...
- 配置mabatis,报Could not load driverClass ${jdbc.driverClassName}
<!-- 扫描mapper --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" ...
- (转)Spring中Singleton模式的线程安全
不知道哪里的文章,总结性还是比较好的.但是代码凌乱,有的还没有图.如果找到原文了可以进行替换! spring中的单例 spring中管理的bean实例默认情况下是单例的[sigleton类型],就还有 ...
- (转)HashMap深入原理解析
[HashMap]深入原理解析 分类: 数据结构 自考 equals与“==”(可以参考自己的另一篇博文) 1,基本数据类型(byte,short,char,int,long,float,double ...
- 【CSS】less 学习小结
1. less 使用 less 可直接使用浏览器解析 or 使用node 的grunt/gulp 解析成传统css . 推荐开发环境直接使用less 文件调试, 生产环境部署解析好的css 2. l ...
- node 简介 起源
最近的node 的一篇文章阅读量很大,所以写一篇基础篇供大家分享,抛砖引玉,各取所需. 部分内容来源大神笔记. Node.js 简介:@@@@@@@@@@@@@@@@@@@ Node.js是目前非常火 ...