quartz也常用在web应用中,常见的是交由spring托管的形式,但这里并非介绍这个。这里介绍quartz在web应用中单独使用。我们看下本章的大纲:
(1)大体思路说明;
(2)新建一个web project;
(3)创建一个job;
(4)创建一个applicationcontextlistener;
(5)常用的cron schedule;
接下来看下具体的内容:
(1)大体思路说明;
一般来说,web应用启动时,应注册已经确定的定时任务;一些动态的、未确定触发时间的定时任务,后续可通过静态的scheduler注册。
所以我们创建一个web项目,在servercontextlistener初始化的时候,添加我们的定时定时任务调度器,在销毁的时候,关闭任务调度器。
(2)新建一个web project;
新建一个web maven project。
在pom.xml文件中添加依赖:
org.quartz-scheduler quartz 2.2.3javax.servlet
servlet-api
3.1-b02(3)创建一个job;
创建一个实现job类的class取名为hellojob,代码如下:
package com.kfit.job;
import java.util.date;
import org.quartz.job;
import org.quartz.jobexecutioncontext;
import org.quartz.jobexecutionexception;
/**
任务类.@author angel --守护天使@version v.0.1@date 2017年4月21日*/
**public **class hellojob implements job{
**public ****void** execute(jobexecutioncontext context) **throws **jobexecutionexception { // 执行响应的任务. system. ***out*** .println(hellojob.execute,+**new** date()); }}
(4)创建一个applicationcontextlistener;
新建一个实现servletcontextlistener的类applicationcontextlistener,代码如下:
package com.kfit.job;
import javax.servlet.servletcontextevent;
import javax.servlet.servletcontextlistener;
import javax.servlet.annotation.weblistener;
import org.quartz.jobbuilder;
import org.quartz.jobdetail;
import org.quartz.scheduler;
import org.quartz.schedulerexception;
import org.quartz.simpleschedulebuilder;
import org.quartz.trigger;
import org.quartz.triggerbuilder;
import org.quartz.impl.stdschedulerfactory;
@weblistener
**public **class applicationcontextlistener implements servletcontextlistener{
**private** scheduler scheduler = **null** ;**public ****void** contextinitialized(servletcontextevent arg0) { **try** { /* *在 quartz 中, scheduler 由 scheduler 工厂创建:directschedulerfactory 或者 stdschedulerfactory。第二种工厂 stdschedulerfactory 使用较多, *因为 directschedulerfactory 使用起来不够方便,需要作许多详细的手工编码设置。 */ // 获取scheduler实例 scheduler = stdschedulerfactory. *getdefaultscheduler* (); scheduler.start(); system. ***out*** .println(scheduler.start); system. ***out*** .println(scheduler.getschedulername()); //具体任务. jobdetail jobdetail = jobbuilder. *newjob* (hellojob. **class** ).withidentity(job1,group1).build(); //触发时间点. (每5秒执行1次.) simpleschedulebuilder simpleschedulebuilder =simpleschedulebuilder. *simpleschedule* ().withintervalinseconds(5).repeatforever(); trigger trigger = triggerbuilder. *newtrigger* ().withidentity(trigger1,group1).startnow().withschedule(simpleschedulebuilder).build(); // 交由scheduler安排触发 scheduler.schedulejob(jobdetail,trigger); } **catch** (schedulerexception e) { e.printstacktrace(); }}**public ****void** contextdestroyed(servletcontextevent arg0) { **try** { scheduler.shutdown(); } **catch** (schedulerexception e) { e.printstacktrace(); }//关闭定时任务调度器.}}
(5)常用的cron schedule;
相对于其他方式定义定时任务的触发时间,我们较常用cron schedule:
// 具体任务
jobdetail job = jobbuilder.newjob(hellojob. **class** ).withidentity(job1, group1).build(); // 触发时间点 cronschedulebuilder cronschedulebuilder = cronschedulebuilder.cronschedule(0 * * * * ? *); trigger trigger = triggerbuilder.newtrigger().withidentity(trigger1, group1) .withschedule(cronschedulebuilder).build();// 交由scheduler安排触发
scheduler.schedulejob(job, trigger);
运动蓝牙耳机选购指南:运动耳机什么款式比较好用
便携式氨气检测仪性能介绍
大部分VR开发者,在用哪个平台的硬件?
123家新三板企业IPO,这两家半导体公司值得关注
二三线省会城市的5G网速有多快
Quartz在Web应用中单独使用
遭遇“罕见”挫折?传OpenAI停止Arrakis新模型开发
嘘!这是一份体面、高端还别致的商务礼品|科大讯飞咪鼠商务礼品S Pro
食用菌智能控制系统,批量调控,让蘑菇种植工厂化
SMC24系列ESD静电抑制器在CAN总线收发器中的应用
微软发布Windows10系统安全重要更新
2019年谈及OPPO,我们会想到什么?
3组6通道DRP的USB PD3.1控制SOC芯片LDR6020P
Yandex被前雇员泄露44.7GB源代码
一种低功耗的电子式电能表电源监控芯片
镍氢电池恒流充电电路图
狄卫CMS银行安防监控系统平台的特点及实现设计
爱普生S1C17M02和S1C17M03 16位微控制器简介
加密货币福音传道者可以被视为过去和未来之间的桥梁
dfrobot十字/一字两用螺丝刀简介