0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Quartz在Web應用中單獨使用

jf_78858299 ? 來源:SpringBoot ? 作者:林祥纖 ? 2023-04-12 10:55 ? 次閱讀

Quartz也常用在Web應用中,常見的是交由Spring托管的形式,但這里并非介紹這個。這里介紹Quartz在Web應用中單獨使用。我們看下本章的大綱:

(1)大體思路說明;

(2)新建一個Web Project;

(3)創(chuàng)建一個Job;

(4)創(chuàng)建一個ApplicationContextListener;

(5)常用的Cron Schedule;

接下來看下具體的內(nèi)容:

(1)大體思路說明;

一般來說,Web應用啟動時,應注冊已經(jīng)確定的定時任務;一些動態(tài)的、未確定觸發(fā)時間的定時任務,后續(xù)可通過靜態(tài)的Scheduler注冊。

所以我們創(chuàng)建一個Web項目,在ServerContextListener初始化的時候,添加我們的定時定時任務調(diào)度器,在銷毀的時候,關(guān)閉任務調(diào)度器。

(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)創(chuàng)建一個Job;

創(chuàng)建一個實現(xiàn)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 {

    // 執(zhí)行響應的任務.

   System. ***out*** .println("HelloJob.execute,"+**new** Date());

  

}

}

(4)創(chuàng)建一個ApplicationContextListener;

新建一個實現(xiàn)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 工廠創(chuàng)建: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();

      

       //觸發(fā)時間點. (每5秒執(zhí)行1次.)

       SimpleScheduleBuilder simpleScheduleBuilder =SimpleScheduleBuilder. *simpleSchedule* ().withIntervalInSeconds(5).repeatForever();

       Trigger trigger = TriggerBuilder. *newTrigger* ().withIdentity("trigger1","group1").startNow().withSchedule(simpleScheduleBuilder).build();

       // 交由Scheduler安排觸發(fā)

       scheduler.scheduleJob(jobDetail,trigger);

   } **catch** (SchedulerException e) {

       e.printStackTrace();

   }

}



**public ****void** contextDestroyed(ServletContextEvent arg0) {

   **try** {

       scheduler.shutdown();

   } **catch** (SchedulerException e) {

       e.printStackTrace();

   }//關(guān)閉定時任務調(diào)度器.

}

}

(5)常用的Cron Schedule;

相對于其他方式定義定時任務的觸發(fā)時間,我們較常用Cron Schedule:

// 具體任務

JobDetail job = JobBuilder.newJob(HelloJob. **class** ).withIdentity("job1", "group1").build();



   // 觸發(fā)時間點

   CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0 * * * * ? *");

   Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")

           .withSchedule(cronScheduleBuilder).build();

// 交由Scheduler安排觸發(fā)

scheduler.scheduleJob(job, trigger);

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Web
    Web
    +關(guān)注

    關(guān)注

    2

    文章

    1263

    瀏覽量

    69492
  • Quartz
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    7947
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    14344
收藏 人收藏

    評論

    相關(guān)推薦

    智能手表Quartz

    本帖最后由 idianze 于 2017-4-14 09:55 編輯   導讀:日前,中興發(fā)布首款智能手表Quartz,高顏值、支持3G,售價1324元?! ≈信d(ZTE)昨晚發(fā)布了旗下首款
    發(fā)表于 04-14 09:53

    怎么Web頁面實現(xiàn)簡單的按鈕按壓?

    嗨,我們已經(jīng)修改了使用和諧棧的Web服務器示例?,F(xiàn)在我們希望Web頁面實現(xiàn)簡單的按鈕按壓。當按下按鈕時,我們應該把消息發(fā)送到調(diào)試端口。MEMCMP(文件名,“1234。HTM”,8
    發(fā)表于 10-17 09:02

    web服務器監(jiān)控系統(tǒng)設計的應用技巧有哪些?

    本文根據(jù)監(jiān)控系統(tǒng)對數(shù)據(jù)吞吐量和安全可靠性等各方面的實際要求,結(jié)合相關(guān)研究的新進展,深入討論了web服務器監(jiān)控系統(tǒng)設計的應用技巧,并詳細做了實現(xiàn)上的闡述。對所有基于嵌入式web技術(shù)的
    發(fā)表于 06-04 06:56

    Java基于WEB的嵌入式系統(tǒng)的應用

    該文提出了一種基于uClinux 嵌入式操作系統(tǒng)的嵌入式系統(tǒng),使用Java 實現(xiàn)嵌入式實時數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)WEB 實時圖形化顯示的方
    發(fā)表于 09-18 10:46 ?31次下載

    基于Web Service 的GIS農(nóng)業(yè)的應用

    本文針對傳統(tǒng) GIS 存在的數(shù)據(jù)共享困難、開發(fā)過程復雜的缺陷,首先簡述了WebService技術(shù),進而提出了基于 Web Service 的 GIS 開發(fā)模型并描述了其運行過程,最后討論了基于 Web Serv
    發(fā)表于 12-12 15:01 ?10次下載

    Web技術(shù)智能建筑中央空調(diào)的應用

    根據(jù)中央空調(diào)控制系統(tǒng)的特點和系統(tǒng)集成的現(xiàn)狀,闡述了將Web Services技術(shù)應用于智能建筑系統(tǒng)集成的方法。構(gòu)建了基于Web Services的智能建筑系統(tǒng)集成的結(jié)構(gòu),并介紹了其工作原
    發(fā)表于 01-22 14:36 ?12次下載

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

    微Wintegra公司使用微捷碼Quartz物理驗證產(chǎn)品成功完成了最新的低功耗、高性能65納米芯片的投片。擁有了Quartz DRC和Quartz LVS的先進功能,Wintegra能夠使用臺積電(TSMC)65納米規(guī)則運行集快
    發(fā)表于 06-24 09:01 ?1087次閱讀

    嵌入式 Linux 智能設備采用 Web 支持

    雖然嵌入式 Linux 智能設備采用 Web 支持已經(jīng)解決了很多問題,但是還有一些和設備相關(guān)的特殊功能是 Web 支持不能提供的。
    發(fā)表于 05-04 16:45 ?699次閱讀
    <b class='flag-5'>在</b>嵌入式 Linux 智能設備<b class='flag-5'>中</b>采用 <b class='flag-5'>Web</b> 支持

    spring4.0如何整合Quartz實現(xiàn)任務調(diào)度詳細資料和程序說明

    Quartz框架是一個全功能、開源的任務調(diào)度服務,可以集成幾乎任何的java應用程序—從小的單片機系統(tǒng)到大型的電子商務系統(tǒng)。Quartz可以執(zhí)行上千上萬的任務調(diào)度。
    發(fā)表于 05-06 18:23 ?1次下載
    spring4.0如何整合<b class='flag-5'>Quartz</b>實現(xiàn)任務調(diào)度詳細資料和程序說明

    如何使用spring4.0整合Quartz實現(xiàn)動態(tài)任務調(diào)度的程序資料說明

    Quartz框架是一個全功能、開源的任務調(diào)度服務,可以集成幾乎任何的java應用程序—從小的單片機系統(tǒng)到大型的電子商務系統(tǒng)。Quartz可以執(zhí)行上千上萬的任務調(diào)度。
    發(fā)表于 04-26 18:26 ?0次下載
    如何使用spring4.0整合<b class='flag-5'>Quartz</b>實現(xiàn)動態(tài)任務調(diào)度的程序資料說明

    web開發(fā)django快速使用指南

    使用python開發(fā)web,使用Django,使你能夠以最小的代價構(gòu)建和維護高質(zhì)量的Web應用。Python各種web框架
    的頭像 發(fā)表于 05-05 22:19 ?3306次閱讀
    <b class='flag-5'>web</b>開發(fā)<b class='flag-5'>中</b>django快速使用指南

    Quartz任務調(diào)度基本實現(xiàn)原理

    Quartz是一個完全由Java編寫的開源作業(yè)調(diào)度框架,為Java應用程序中進行作業(yè)調(diào)度提供了簡單卻強大的機制。Quartz允許開發(fā)人員根據(jù)時間間隔來調(diào)度作業(yè)。它實現(xiàn)了作業(yè)和觸發(fā)器的多對多的關(guān)系,還能把多個作業(yè)與不同的觸發(fā)器關(guān)
    的頭像 發(fā)表于 04-12 10:48 ?1016次閱讀

    Quartz編碼中用到的幾個對象

    使用Quartz的時候,我們需要用到Quartz的幾個對象:Job(任務),JobDetail(任務定義:使用JobDetail來定義定時任務的實例),Trigger(觸發(fā)器:任務
    的頭像 發(fā)表于 04-12 10:50 ?461次閱讀

    Spring Boot QuartzJava Project的使用

    這一篇文章,我們緊接著上一篇的文章,講講Quartzjava project的項目中如何進行使用,在這里我們使用maven進行構(gòu)建項目。先看下本章的大綱:
    的頭像 發(fā)表于 04-12 10:53 ?853次閱讀

    base64Web開發(fā)的作用

    Web開發(fā),數(shù)據(jù)的傳輸和存儲是核心任務之一。然而,并非所有數(shù)據(jù)都可以直接在Web環(huán)境中高效傳輸。例如,二進制數(shù)據(jù)(如圖片、音頻和視頻)
    的頭像 發(fā)表于 11-10 11:07 ?372次閱讀