日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Quartz教程:快速入门

發(fā)布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Quartz教程:快速入门 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本系列教程由quartz-2.2.x官方文檔翻譯、整理而來,希望給同樣對quartz感興趣的朋友一些參考和幫助,有任何不當(dāng)或錯誤之處,歡迎指正;有興趣研究源碼的同學(xué),可以參考我對quartz-core源碼的注釋(進(jìn)行中)。

歡迎來到quartz快速入門教程。閱讀本教程,你將會了解:

  • quartz下載
  • quartz安裝
  • 根據(jù)你的需要,配置Quartz
  • 開始一個示例應(yīng)用

當(dāng)熟悉了quratz調(diào)度的基本功能后,可以嘗試一些更高級的特性,比如Where,這個一個企業(yè)級功能,可以讓job和trigger運(yùn)行在指定的,而不是隨機(jī)的Terracotta客戶端上。

下載和安裝

首先,下載最新的穩(wěn)定版?– 不用注冊。解壓并安裝。

Quartz jar文件

quartz安裝包根目錄的lib/目錄下有很多的jar包。其中,quartz-xxx.jar(其中xxx是版本號)是最主要的。為了使用quartz,必須將該jar包放在應(yīng)用的classpath下;

下載后,解壓,然后將quartz-xxx.jar放到你的應(yīng)用中。

我主要是在應(yīng)用服務(wù)器的環(huán)境中使用quartz,所以一般將quartz jar包放到應(yīng)用中(.ear或.war)。當(dāng)然,如果你希望在很多應(yīng)用中使用quartz,將quartz的jar包放在應(yīng)用服務(wù)器(appserver)的classpath下即可。如果你只是希望在獨(dú)立的應(yīng)用中使用quartz,將quartz的jar包和你的應(yīng)用依賴的其它jar包放在一起即可。

quzrtz依賴一些第三方的庫(以jar包的形式),這些庫位于quartz安裝包的lib目錄下。要使用quartz的所有功能,必須將所有的第三方j(luò)ar包都放到classpath下。如果你開發(fā)的是一個獨(dú)立的quartz應(yīng)用,建議將所有的jar包都放到classpath下;如果是在應(yīng)用服務(wù)器環(huán)境下使用quartz,其中有些包可能已經(jīng)存在于classpath中了,因此你需要自己選擇。

在應(yīng)用服務(wù)器環(huán)境下,如果同一個jar文件,存在兩個不同的版本,要注意,可能會產(chǎn)生一些奇怪的結(jié)果;比如,WebLogic包含了一個J2EE的實(shí)現(xiàn)(在weblogic.jar中),該實(shí)現(xiàn)與servlet.jar的實(shí)現(xiàn)可能不一致。此時,應(yīng)該從你的應(yīng)用中排除掉servlet.jar,這樣你就知道使用的是哪個類了。

properties文件

quartz使用名為quartz.properties的配置文件。剛開始時該配置文件不是必須的,但是為了使用最基本的配置,該文件必須位于classpath下。

基于我的個人情況舉個例子,我的應(yīng)用是基于WebLogic Workshop開發(fā)的。我將所有的配置文件(包括quartz.properties)放到應(yīng)用根目錄下的一個項(xiàng)目中。當(dāng)我將項(xiàng)目打包成.ear文件時,放置配置文件的項(xiàng)目會以jar包的形式進(jìn)入最終的.ear包,所以quartz.properties文件就自動位于classpath中了。

如果你準(zhǔn)備構(gòu)建一個使用quartz的web應(yīng)用(以.war包的形式),你應(yīng)該將quartz.properties文件放到WEB-INF/classes目錄下。

配置

這里包含很多內(nèi)容。quartz是一個配置很靈活的應(yīng)用。配置quartz最好的方式是,編輯quartz.properties文件,然后放到應(yīng)用的classpath下。

quartz的安裝包中包含了一些配置文件的示例,位于example/目錄下。我建議你創(chuàng)建自己的quartz.properties文件,而不是簡單地從示例中拷貝并刪除不需要的部分。這樣看起來更整潔,而且你也會了解到quartz的更多功能。

關(guān)于quartz配置文件的詳細(xì)文檔,請查閱Quartz配置參考

為了使用quartz,一個基本的quartz.properties配置文件如下所示:

org.quartz.scheduler.instanceName = MyScheduler org.quartz.threadPool.threadCount = 3 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

上述配置的scheduler有如下特點(diǎn):

  • org.quartz.scheduler.instanceName scheduler的名稱為“MyScheduler”
  • org.quartz.threadPool.threadCount 線程池中有3個線程,即最多可以同時執(zhí)行3個job;
  • org.quartz.jobStore.class quartz的所有數(shù)據(jù),包括job和trigger的配置,都會存儲在內(nèi)存中(而不是數(shù)據(jù)庫里)。如果你想使用quartz的數(shù)據(jù)庫存儲功能(校對注:設(shè)置成另外一個類),我們建議在使用數(shù)據(jù)庫存儲之前,先使用內(nèi)存存儲(RamJobStore)。

示例應(yīng)用

下載和安裝完quartz后,是時候開發(fā)一個示例應(yīng)用,并讓它跑起來了。下面的示例代碼,獲取scheduler實(shí)例對象,啟動,然后關(guān)閉。

QuartzTest.java

import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.impl.StdSchedulerFactory;import static org.quartz.JobBuilder.*;import static org.quartz.TriggerBuilder.*;import static org.quartz.SimpleScheduleBuilder.*;public class QuartzTest {public static void main(String[] args) {try {// Grab the Scheduler instance from the Factory Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();// and start it offscheduler.start();scheduler.shutdown();} catch (SchedulerException se) {se.printStackTrace();}}}

當(dāng)你調(diào)用StdSchedulerFactory.getDefaultScheduler()獲取scheduler實(shí)例對象后,在調(diào)用scheduler.shutdown()之前,scheduler不會終止,因?yàn)檫€有活躍的線程在執(zhí)行。

注意示例代碼中的靜態(tài)導(dǎo)入(static import),下面的代碼中也會用到它們。

如果你沒有配置日志輸出,所有的日志會輸出到控制臺,比如:

[INFO] 21 Jan 08:46:27.857 AM main [org.quartz.core.QuartzScheduler] Quartz Scheduler v.2.0.0-SNAPSHOT created.[INFO] 21 Jan 08:46:27.859 AM main [org.quartz.simpl.RAMJobStore] RAMJobStore initialized.[INFO] 21 Jan 08:46:27.865 AM main [org.quartz.core.QuartzScheduler] Scheduler meta-data: Quartz Scheduler (v2.0.0) 'Scheduler' with instanceId 'NON_CLUSTERED'Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.NOT STARTED.Currently in standby mode.Number of jobs executed: 0Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 50 threads.Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.[INFO] 21 Jan 08:46:27.865 AM main [org.quartz.impl.StdSchedulerFactory] Quartz scheduler 'Scheduler' initialized from default resource file in Quartz package: 'quartz.properties'[INFO] 21 Jan 08:46:27.866 AM main [org.quartz.impl.StdSchedulerFactory] Quartz scheduler version: 2.0.0[INFO] 21 Jan 08:46:27.866 AM main [org.quartz.core.QuartzScheduler] Scheduler Scheduler_$_NON_CLUSTERED started.[INFO] 21 Jan 08:46:27.866 AM main [org.quartz.core.QuartzScheduler] Scheduler Scheduler_$_NON_CLUSTERED shutting down.[INFO] 21 Jan 08:46:27.866 AM main [org.quartz.core.QuartzScheduler] Scheduler Scheduler_$_NON_CLUSTERED paused.[INFO] 21 Jan 08:46:27.867 AM main [org.quartz.core.QuartzScheduler] Scheduler Scheduler_$_NON_CLUSTERED shutdown complete.

你可以在start()和shutdown()之間做一些有趣的事情:

// define the job and tie it to our HelloJob classJobDetail job = newJob(HelloJob.class).withIdentity("job1", "group1").build();// Trigger the job to run now, and then repeat every 40 secondsTrigger trigger = newTrigger().withIdentity("trigger1", "group1").startNow().withSchedule(simpleSchedule().withIntervalInSeconds(40).repeatForever()) .build();// Tell quartz to schedule the job using our triggerscheduler.scheduleJob(job, trigger);

在調(diào)用shutdown()之前,你需要給job的觸發(fā)和執(zhí)行預(yù)留一些時間,比如,你可以調(diào)用Thread.sleep(60000)讓線程睡眠一段時間。

好了,自己去探索吧!

  • 轉(zhuǎn)載自?并發(fā)編程網(wǎng) - ifeve.com
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的Quartz教程:快速入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。