在spring中用quartz實現作業排程(三)
2023年08月27日 星期三 17:24
作業排程(quartz)技術總結(三)
listener是我們建立用於監聽scheduler中關於事件發生情況的物件,其中triggerlistener接收涉及trigger事件的情況,joblistener接收涉及job事件的情況。
l trigger的事件: trigger觸發、trigger過時觸發和trigger觸發的完成。
l job的事件:job的執行通知和job的完成通知。
要建立listener,只需簡單的實現org.quartz.triggerlistener或org.quartz.joblistener介面,接著執行時把listener註冊到scheduler中即可,在註冊過程中需要為建立的listener命名,listener可以註冊為全域性的和非全域性的,全域性的listener接收所有trigger/job的事件,非全域性的listener只接收指定設定的trigger/job事件,把joblistener註冊到scheduler的方法如下:scheduler.addglobaljoblistener(myjoblistener)或scheduler.addjoblistener(myjoblistener);
schedulerlistener與triggerlistener和joblistener類似,schedulerlistener只接收涉及scheduler自己的事件通知,而與指定設定的trigger/job無關;
有關scheduler的事件包括:job/trigger的增加、job/trigger的刪除、scheduler中一系列嚴重的事件和scheduler的關閉等事件;
schedulerlistener的建立和註冊與其他型別的listener很相似,但是它沒有區分全域性和非全域性的情況,只要實現了org.quartz.schedulerlistener介面的物件都是。
jobstore負責跟蹤我們對scheduler進行配置的有關job、trigger和calendar等資訊的資料;選擇適當的jobstore對我們的quartz scheduler例項是很重要的,幸運的是,當我們理解了不同型別jobstore時,就可以很容易地對jobstore進行選擇,我們可以通過對schedule***ctory建立scheduler例項所引用的配置檔案中的屬性進行宣告,採用哪種jobstore。
ramjobstore是使用jobstore最簡單的一種方式,它也是效能最高效的,顧名思義,jobstore是把它的資料都儲存在ram中,這也是它的快速和簡單配置的原因;ramjobstore的缺點是:當我們的應用系統因為系統的崩潰而丟失了所有有關scheduler的資訊時,採用ramjobstore方式將無法恢復原先scheduler中有關job和trigger的設定;對一些應用來說,這是可以接收的,但是對其他一些應用來說,這就不是所期望的。
jdbcjobstore也是一種相當有名的jobstore,它通過jdbc把資料都儲存到資料庫中,所以在配置上會比ramjobstore複雜一些,而且不像ramjobstore那麼快,但是當我們對資料庫中的表的主鍵建立索引時,效能上的缺點就不是很關鍵的了。
jdbcjobstore幾乎可以連線所有的資料庫,廣泛使用的資料庫基本上有oracle、mysql、ms sqlserver 2000、hsqldb、postresql和db2。使用jdbcstore,我們必須首選建立一系列的資料庫表,為了提供給quartz使用;我們可以在docs/dbtables目錄中找到建立表sql指令碼檔案,需要注意的是:在這些指令碼中所建立的表都以「qrtz_」為表名的字首,如:qrtz_triggers和qrtz_job_detail;我們可以對錶名的字首進行任意的修改,只要配置檔案中有關字首的屬性值與實際的資料庫表的字首一致即可;採用字首的方式可以在同乙個資料庫中儲存多個scheduler例項的資料,通過不同的字首進行區分;
我們一旦完成了資料庫表的建立,在我們配置和啟用jdbcjobstore之前,需要決定在我們的應用中採用哪一種型別的事務;如果我們在執行scheduling命令(如:增加和刪除trigger)時不需要關聯到其他的事務中,我們就可以採用jobstoretx的方式讓quartz管理這個事務,一般情況下都是採用jobstoretx的方式來管理事務的。
如果我們應用中需要quartz與其他事務一起執行(如:j2ee應用伺服器),就需要採用jobstorecmt的事務管理方式,這樣quartz將會讓應用伺服器容器管理事務;
最後乙個難題是jdbcjobstore中有關連線資料庫的datasource的設定,quartz屬性中包含了datasource的幾種配置方法,一種是採用quartz建立和管理datasource的方式,提供了資料庫連線的所有資訊;另一種是quartz使用應用伺服器(quartz執行當中的應用伺服器)管理的datasource,通過採用提供jdbcjobstore的jndi名字的方式;有關配置屬性的詳細資訊,可以參考「docs/config」目錄中的配置檔案。
為了使用jdbcjobstore,我們首選需要設定quartz配置檔案中jobstore類屬性值為org.quartz.impl.jdbcjobstore.jobstoretx或為org.quartz.impl.jdbcjobstore.jobstorecmt
Quartz 作業排程
當你在應用程式需要作業排程的時候,使用quartz 作業排程可以解決你問題。步驟 2.做乙個類來管理各個job的排程,假設類名為quartzmanager summary description for quartzmanager public class quartzmanager 某個job p...
Quartz作業排程實踐
quartz的使用場景 例如 每5秒對某個平台傳輸資料 quartz框架的一些基礎概念解釋 scheduler 作業排程器。ijob 作業介面,繼承並實現execute,編寫執行的具體作業邏輯。jobbuilder 根據設定,生成乙個詳細作業資訊 jobdetail triggerbuilder 根...
用Quartz實現作業排程
這個跟定時器差不多,可以用來按時需要出現的功能。job 是乙個介面,它只有乙個方法void execute jobexecutioncontext context 開發者實現該介面定義執行任務,jobexecutioncontext類提供了排程上下文的各種資訊。job執行時的資訊儲存在jobexec...