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

    文章

    1238

    浏览量

    68460
  • Quartz
    +关注

    关注

    0

    文章

    7

    浏览量

    7905
  • spring
    +关注

    关注

    0

    文章

    332

    浏览量

    14161
收藏 人收藏

    评论

    相关推荐

    labview如何用http工具向web服务器发送数据?

    求助攻!labview如何用http工具向web服务器发送数据?
    发表于 10-17 20:48

    智能手表Quartz

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

    Web Service是如何工作的?

    Web服务提供者按SOAP消息执行相应的Web服务,并将服务结果返回给Web服务请求者。(绑定)XML、Soap、WSDL和UDDIWeb
    发表于 03-16 16:04

    嵌入式Web技术无纸记录仪的应用研究

    Web技术无纸记录仪的应用研究具有重要意义。以太网无纸记录仪yunrun.com.cn/product/339.html1、嵌入式web系统简介在信息技术飞速发展的背景下,人们生活
    发表于 08-11 22:37

    怎么使用VeeWeb上打开/读取文件

    你好;我正在尝试使用vee来读取不在硬盘驱动器上但在Web位置(例如html文件等)的文件。我希望能够从web读取任何文件到数组。如果我将文件复制到硬盘驱动器,我可以使用它。我只是
    发表于 03-14 13:17

    请问web serverLwIP怎么配置

    我想做一个web网页控制LED灯的实验。 web serverLwIP需要怎么配置以及自己做的网页怎么实现在程序?谢谢
    发表于 07-03 04:35

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

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

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

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

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

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

    微捷码Quartz DRC物理验证通过GF 28nm验证

    微捷码Quartz DRC物理验证解决方案通过了质量检验,可支持GLOBALFOUNDRIES的28纳米及28纳米以下技术DRC+流程,紧密集成的Quartz DRC和Talus RTL-to-GDSII解决方案让GLOBALFOUNDRIES的DFM流程实现了自动化
    发表于 09-08 09:47 1058次阅读

    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>实现动态任务调度的程序资料说明

    Quartz任务调度基本实现原理

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

    Quartz中编码中用到的几个对象

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

    Spring Boot Quartz在Java Project中的使用

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