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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Quartz Scheduler插件–隐藏的宝藏

發(fā)布時間:2023/12/3 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Quartz Scheduler插件–隐藏的宝藏 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
盡管在官方文檔中進(jìn)行了簡要描述,但我相信Quartz插件了解得還不夠多,看看它們有多有用。

本質(zhì)上,Quartz中的插件是方便的類,用于包裝基礎(chǔ)偵聽器的注冊。 您可以自由編寫自己的插件,但我們將專注于Quartz隨附的現(xiàn)有插件。

LoggingTriggerHistoryPlugin

首先介紹一些背景。 Quartz中的兩個主要抽象是作業(yè)和觸發(fā)器。 Job是我們要計劃的一段代碼。 觸發(fā)器指示調(diào)度程序何時應(yīng)運(yùn)行此代碼。 CRON(例如,每個星期五在9 AM到5 PM之間運(yùn)行直到11月)和簡單的(每2小時運(yùn)行100次)觸發(fā)器是最常用的。 您可以將任意數(shù)量的觸發(fā)器關(guān)聯(lián)到一個作業(yè)。

信不信由你,Quartz默認(rèn)不提供任何日志記錄或監(jiān)視任何已執(zhí)行的作業(yè)和觸發(fā)器。 有一個API,但是沒有實現(xiàn)內(nèi)置的日志記錄。 它不會向您顯示由于觸發(fā)觸發(fā)器而現(xiàn)在可以執(zhí)行此特定作業(yè)。 因此,您應(yīng)該做的第一件事是將以下幾行添加到quartz.properties中:

org.quartz.plugin.triggerHistory.class=org.quartz.plugins.history.LoggingTriggerHistoryPluginorg.quartz.plugin.triggerHistory.triggerFiredMessage=Trigger [{1}.{0}] fired job [{6}.{5}] scheduled at: {2, date, dd-MM-yyyy HH:mm:ss.SSS}, next scheduled at: {3, date, dd-MM-yyyy HH:mm:ss.SSS}org.quartz.plugin.triggerHistory.triggerCompleteMessage=Trigger [{1}.{0}] completed firing job [{6}.{5}] with resulting trigger instruction code: {9}. Next scheduled at: {3, date, dd-MM-yyyy HH:mm:ss.SSS}org.quartz.plugin.triggerHistory.triggerMisfiredMessage=Trigger [{1}.{0}] misfired job [{6}.{5}]. Should have fired at: {3, date, dd-MM-yyyy HH:mm:ss.SSS}

第一行(也是唯一需要的行)將加載插件類LoggingTriggerHistoryPlugin。 其余各行將配置插件,自定義日志消息。 我發(fā)現(xiàn)內(nèi)置默認(rèn)值不是很周全,例如,它們顯示當(dāng)前時間,這已經(jīng)是日志框架消息的一部分。 您可以自由構(gòu)造任何日志消息,有關(guān)詳細(xì)信息,請參閱API。 添加這些額外的幾行使調(diào)試和監(jiān)視更加容易:

LoggingTriggerHistoryPlugin | Trigger [Demo.Every-few-seconds] fired job [Demo.Print-message] scheduled at: 04-04-2012 23:23:47.036, next scheduled at: 04-04-2012 23:23:51.036 //...job output LoggingTriggerHistoryPlugin | Trigger [Demo.Every-few-seconds] completed firing job [Demo.Print-message] with resulting trigger instruction code: DO NOTHING. Next scheduled at: 04-04-2012 23:23:51.036

現(xiàn)在您知道為什么命名觸發(fā)器(Demo.Every-few-seconds)和作業(yè)(Demo.Print-message)如此重要。

LoggingJobHistoryPlugin

還有另一個與日志記錄相關(guān)的便捷插件:

org.quartz.plugin.jobHistory.class=org.quartz.plugins.history.LoggingJobHistoryPlugin org.quartz.plugin.jobHistory.jobToBeFiredMessage=Job [{1}.{0}] to be fired by trigger [{4}.{3}], re-fire: {7} org.quartz.plugin.jobHistory.jobSuccessMessage=Job [{1}.{0}] execution complete and reports: {8} org.quartz.plugin.jobHistory.jobFailedMessage=Job [{1}.{0}] execution failed with exception: {8} org.quartz.plugin.jobHistory.jobWasVetoedMessage=Job [{1}.{0}] was vetoed. It was to be fired by trigger [{4}.{3}] at: {2, date, dd-MM-yyyy HH:mm:ss.SSS}

規(guī)則是相同的–插件+額外配置。 有關(guān)詳細(xì)信息和可能的占位符,請參見LoggingJobHistoryPlugin的JavaDoc 。 快速查看日志可以發(fā)現(xiàn)非常具有描述性的輸出:

Trigger [Demo.Every-few-seconds] fired job [Demo.Print-message] scheduled at: 04-04-2012 23:34:53.739, next scheduled at: 04-04-2012 23:34:57.739 Job [Demo.Print-message] to be fired by trigger [Demo.Every-few-seconds], re-fire: 0 //...job output Job [Demo.Print-message] execution complete and reports: null Trigger [Demo.Every-few-seconds] completed firing job [Demo.Print-message] with resulting trigger instruction code: DO NOTHING. Next scheduled at: 04-04-2012 23:34:57.739

我不知道為什么默認(rèn)情況下不啟用這些插件。 畢竟,如果您不需要這樣的詳細(xì)輸出,則可以在日志記錄框架中將其關(guān)閉。 沒關(guān)系,我認(rèn)為在對Quartz執(zhí)行進(jìn)行故障排除時將它們安裝到位是個好主意。

XMLSchedulingDataProcessorPlugin

這是一個非常全面的插件。 它讀取包含作業(yè)的XML文件(默認(rèn)名稱為quartz_data.xml)并觸發(fā)定義,并將其添加到調(diào)度程序中。 當(dāng)您有一次需要添加一次的全局作業(yè)時,此功能特別有用。 插件可以更新現(xiàn)有的作業(yè)/觸發(fā)器,也可以忽略XML文件(如果它們已經(jīng)存在)–在使用JDBCJobStore時非常有用。

org.quartz.plugin.xmlScheduling.class=org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin

在上述文章中,我們一直在手動將作業(yè)添加到調(diào)度程序中:

val trigger = newTrigger().withIdentity("Every-few-seconds", "Demo").withSchedule(simpleSchedule().withIntervalInSeconds(4).repeatForever()).build()val job = newJob(classOf[PrintMessageJob]).withIdentity("Print-message", "Demo").usingJobData("msg", "Hello, world!").build()scheduler.scheduleJob(job, trigger)

使用XML配置可以實現(xiàn)相同的效果,只需將以下quartz_data.xml放在CLASSPATH中:

<?xml version="1.0" encoding="UTF-8"?> <job-scheduling-data xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation=" http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_2_0.xsd "><processing-directives><overwrite-existing-data>false</overwrite-existing-data><ignore-duplicates>true</ignore-duplicates></processing-directives><schedule><trigger><simple><name>Every-few-seconds</name><group>Demo</group><job-name>Print-message</job-name><job-group>Demo</job-group><repeat-count>-1</repeat-count><repeat-interval>4000</repeat-interval></simple></trigger><job><name>Print-message</name><group>Demo</group><job-class>com.blogspot.nurkiewicz.quartz.demo.PrintMessageJob</job-class><job-data-map><entry><key>msg</key><value>Hello, World!</value></entry></job-data-map></job></schedule></job-scheduling-data>

使用XML配置可以實現(xiàn)相同的效果,只需將以下quartz_data.xml放在CLASSPATH中:

org.quartz.plugin.xmlScheduling.fileNames=/etc/quartz/system-jobs.xml,/home/johnny/my-jobs.xml org.quartz.plugin.xmlScheduling.scanInterval=60

關(guān)機(jī)鉤子插件

最后但并非最不重要的是ShutdownHookPlugin。 小型但可能有用的插件,可以在JVM中注冊關(guān)閉鉤子,以便輕輕地停止調(diào)度程序。 但是,我建議關(guān)閉cleanShutdown –如果系統(tǒng)已經(jīng)試圖突然停止應(yīng)用程序(通常是Spring通過SchedulerFactoryBean通過SchedulerFactoryBean調(diào)用調(diào)度程序關(guān)閉)或用戶按下Ctrl + C –等待當(dāng)前正在運(yùn)行的作業(yè)似乎是個壞主意。 畢竟,也許由于某些作業(yè)運(yùn)行時間過長/過長而導(dǎo)致我們正在終止應(yīng)用程序?

org.quartz.plugin.shutdownHook.class=org.quartz.plugins.management.ShutdownHookPlugin org.quartz.plugin.shutdownHook.cleanShutdown=false

如您所見,Qurtz附帶了一些非常有趣的插件。 由于某些原因,它們在官方文檔中沒有詳細(xì)描述,但是它們工作得很好,并且是調(diào)度程序的重要補(bǔ)充。

帶有已應(yīng)用插件的源代碼可在GitHub上獲得。

參考: Quartz Scheduler插件– Java和社區(qū)博客上來自JCG合作伙伴 Tomasz Nurkiewicz的隱藏寶藏 。


翻譯自: https://www.javacodegeeks.com/2012/04/quartz-scheduler-plugins-hidden.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的Quartz Scheduler插件–隐藏的宝藏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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