0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Quartz在Web应用中单独使用

jf_78858299 来源:SpringBoot 作者:林祥纤 2023-04-12 10:55 次阅读

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文件中添加依赖:

<groupId>org.quartz-scheduler<span class="hljs-name"groupId>

        <artifactId>quartz<span class="hljs-name"artifactId>

        <version>2.2.3<span class="hljs-name"version>

javax.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);

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Web
    Web
    +关注

    关注

    2

    文章

    1269

    浏览量

    69684
  • Quartz
    +关注

    关注

    0

    文章

    7

    浏览量

    7952
  • spring
    +关注

    关注

    0

    文章

    340

    浏览量

    14378
收藏 人收藏

    评论

    相关推荐

    智能手表Quartz

    本帖最后由 idianze 于 2017-4-14 09:55 编辑   导读:日前,中兴发布首款智能手表Quartz,高颜值、支持3G,售价1324元。  中兴(ZTE)昨晚发布了旗下首款
    发表于 04-14 09:53

    怎么Web页面实现简单的按钮按压?

    嗨,我们已经修改了使用和谐栈的Web服务器示例。现在我们希望Web页面实现简单的按钮按压。当按下按钮时,我们应该把消息发送到调试端口。MEMCMP(文件名,“1234。HTM”,8
    发表于 10-17 09:02

    web服务器监控系统设计的应用技巧有哪些?

    本文根据监控系统对数据吞吐量和安全可靠性等各方面的实际要求,结合相关研究的新进展,深入讨论了web服务器监控系统设计的应用技巧,并详细做了实现上的阐述。对所有基于嵌入式web技术的
    发表于 06-04 06:56

    Java基于WEB的嵌入式系统的应用

    该文提出了一种基于uClinux 嵌入式操作系统的嵌入式系统,使用Java 实现嵌入式实时数据采集系统数据WEB 实时图形化显示的方
    发表于 09-18 10:46 31次下载

    基于Web Service 的GIS农业的应用

    本文针对传统 GIS 存在的数据共享困难、开发过程复杂的缺陷,首先简述了WebService技术,进而提出了基于 Web Service 的 GIS 开发模型并描述了其运行过程,最后讨论了基于 Web Serv
    发表于 12-12 15:01 10次下载

    Web技术智能建筑中央空调的应用

    根据中央空调控制系统的特点和系统集成的现状,阐述了将Web Services技术应用于智能建筑系统集成的方法。构建了基于Web Services的智能建筑系统集成的结构,并介绍了其工作原
    发表于 01-22 14:36 12次下载

    Quartz DRC和Quartz LVS:最快速的全线性物

    微Wintegra公司使用微捷码Quartz物理验证产品成功完成了最新的低功耗、高性能65纳米芯片的投片。拥有了Quartz DRC和Quartz LVS的先进功能,Wintegra能够使用台积电(TSMC)65纳米规则运行集快
    发表于 06-24 09:01 1104次阅读

    嵌入式 Linux 智能设备采用 Web 支持

    虽然嵌入式 Linux 智能设备采用 Web 支持已经解决了很多问题,但是还有一些和设备相关的特殊功能是 Web 支持不能提供的。
    发表于 05-04 16:45 719次阅读
    <b class='flag-5'>在</b>嵌入式 Linux 智能设备<b class='flag-5'>中</b>采用 <b class='flag-5'>Web</b> 支持

    spring4.0如何整合Quartz实现任务调度详细资料和程序说明

    Quartz框架是一个全功能、开源的任务调度服务,可以集成几乎任何的java应用程序—从小的单片机系统到大型的电子商务系统。Quartz可以执行上千上万的任务调度。
    发表于 05-06 18:23 1次下载
    spring4.0如何整合<b class='flag-5'>Quartz</b>实现任务调度详细资料和程序说明

    如何使用spring4.0整合Quartz实现动态任务调度的程序资料说明

    Quartz框架是一个全功能、开源的任务调度服务,可以集成几乎任何的java应用程序—从小的单片机系统到大型的电子商务系统。Quartz可以执行上千上万的任务调度。
    发表于 04-26 18:26 0次下载
    如何使用spring4.0整合<b class='flag-5'>Quartz</b>实现动态任务调度的程序资料说明

    web开发django快速使用指南

    使用python开发web,使用Django,使你能够以最小的代价构建和维护高质量的Web应用。Python各种web框架
    的头像 发表于 05-05 22:19 3345次阅读
    <b class='flag-5'>web</b>开发<b class='flag-5'>中</b>django快速使用指南

    Quartz任务调度基本实现原理

    Quartz是一个完全由Java编写的开源作业调度框架,为Java应用程序中进行作业调度提供了简单却强大的机制。Quartz允许开发人员根据时间间隔来调度作业。它实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关
    的头像 发表于 04-12 10:48 1059次阅读

    Quartz编码中用到的几个对象

    使用Quartz的时候,我们需要用到Quartz的几个对象:Job(任务),JobDetail(任务定义:使用JobDetail来定义定时任务的实例),Trigger(触发器:任务
    的头像 发表于 04-12 10:50 498次阅读

    Spring Boot QuartzJava Project的使用

    这一篇文章,我们紧接着上一篇的文章,讲讲Quartzjava project的项目中如何进行使用,在这里我们使用maven进行构建项目。先看下本章的大纲:
    的头像 发表于 04-12 10:53 880次阅读

    base64Web开发的作用

    Web开发,数据的传输和存储是核心任务之一。然而,并非所有数据都可以直接在Web环境中高效传输。例如,二进制数据(如图片、音频和视频)
    的头像 发表于 11-10 11:07 464次阅读