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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Quartz】插件的使用

發布時間:2023/12/18 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Quartz】插件的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

? Quartz 框架提供了幾種用于擴展平臺能力的方式。通過使用各種 "鉤子" (通常指的就是擴展點),Quartz 變得很容易被擴展和定制化來適應你的需要。其中一個最簡單的擴展框架的方法就是使用 Quartz 插件。本章就來看看如何使用插件機制讓 Quartz 進入到之前 Quartz 用戶沒去過的領域。

?

一、使用Quartz自帶插件范例

?? 下面將使用插件實現從XML得到JOB,不用手工的把job和trigger加到Scheduler中去再來運行,這樣就很方便。如果要更改任務,直接在xml中配置就可以了。不用再寫java代碼。

1、首先是job類:

import java.util.Date; import java.util.Set;import org.quartz.DisallowConcurrentExecution; import org.quartz.InterruptableJob; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.JobKey; import org.quartz.PersistJobDataAfterExecution; import org.quartz.UnableToInterruptJobException; import org.slf4j.Logger; import org.slf4j.LoggerFactory;@PersistJobDataAfterExecution @DisallowConcurrentExecution public class SimpleJob implements Job {private static Logger log = LoggerFactory.getLogger(SimpleJob.class);private JobKey jobkey=null;@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {jobkey = context.getJobDetail().getKey();log.info("Excuting job: " + jobkey + " executing at " + new Date()+" fire by: "+context.getTrigger().getKey());if(context.getMergedJobDataMap().size()>0){Set<String> keys= context.getMergedJobDataMap().keySet();for (String key : keys) {String value= context.getMergedJobDataMap().getString(key);log.info(" jobdatamap entry: "+key+" = "+value);}context.setResult("hello");}}}


2、job觸發時間配置,使用quartz_data.xml

<?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_1_8.xsd"version="1.8"><pre-processing-commands><delete-jobs-in-group>*</delete-jobs-in-group> <!-- clear all jobs in scheduler --><delete-triggers-in-group>*</delete-triggers-in-group> <!-- clear all triggers in scheduler --></pre-processing-commands><processing-directives><!-- if there are any jobs/trigger in scheduler of same name (as in this file), overwrite them --><overwrite-existing-data>true</overwrite-existing-data><!-- if there are any jobs/trigger in scheduler of same name (as in this file), and over-write is false, ignore them rather then generating an error --><ignore-duplicates>false</ignore-duplicates> </processing-directives><schedule><job><name>TestJob1</name><job-class>com.mucfc.SimpleJob</job-class></job><job><name>TestDurableJob</name><job-class>com.mucfc.SimpleJob</job-class><durability>true</durability><recover>false</recover></job><trigger><simple><name>TestSimpleTrigger1AtFiveSecondInterval</name><job-name>TestJob1</job-name><repeat-count>-1</repeat-count> <!-- repeat indefinitely --><repeat-interval>5000</repeat-interval> <!-- every 5 seconds --></simple></trigger><job><name>TestJob2</name><group>GroupOfTestJob2</group><description>This is the description of TestJob2</description><job-class>com.mucfc.SimpleJob</job-class><durability>false</durability><recover>true</recover><job-data-map><entry><key>someKey</key><value>someValue</value></entry><entry><key>someOtherKey</key><value>someOtherValue</value></entry></job-data-map></job><trigger><simple><name>TestSimpleTrigger2AtTenSecondIntervalAndFiveRepeats</name><group>GroupOfTestJob2Triggers</group><job-name>TestJob2</job-name><job-group>GroupOfTestJob2</job-group><start-time>2010-02-09T10:15:00</start-time><misfire-instruction>MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT</misfire-instruction><repeat-count>5</repeat-count><repeat-interval>10000</repeat-interval></simple></trigger><trigger><cron><name>TestCronTrigger2AtEveryMinute</name><group>GroupOfTestJob2Triggers</group><job-name>TestJob2</job-name><job-group>GroupOfTestJob2</job-group><job-data-map><entry><key>someKey</key><value>overriddenValue</value></entry><entry><key>someOtherKey</key><value>someOtherOverriddenValue</value></entry></job-data-map><cron-expression>0 * * ? * *</cron-expression></cron></trigger><trigger><cron><name>TestCronTrigger2AtEveryMinuteOnThe45thSecond</name><group>GroupOfTestJob2Triggers</group><job-name>TestJob2</job-name><job-group>GroupOfTestJob2</job-group><start-time>2015-05-12T12:26:00.0</start-time><end-time>2015-05-16T12:26:00.0</end-time><misfire-instruction>MISFIRE_INSTRUCTION_SMART_POLICY</misfire-instruction><cron-expression>45 * * ? * *</cron-expression><time-zone>America/Los_Angeles</time-zone></cron></trigger></schedule> </job-scheduling-data>


3、配置文件

#============================================================================ # Configure Main Scheduler Properties #============================================================================org.quartz.scheduler.instanceName: TestScheduler org.quartz.scheduler.instanceId: AUTOorg.quartz.scheduler.skipUpdateCheck: true#============================================================================ # Configure ThreadPool #============================================================================org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount: 3 org.quartz.threadPool.threadPriority: 5#============================================================================ # Configure JobStore #============================================================================org.quartz.jobStore.misfireThreshold: 60000org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore#org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX #org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.PostgreSQLDelegate #org.quartz.jobStore.useProperties: false #org.quartz.jobStore.dataSource: myDS #org.quartz.jobStore.tablePrefix: QRTZ_ #org.quartz.jobStore.isClustered: false#============================================================================ # Configure Datasources #============================================================================#org.quartz.dataSource.myDS.driver: org.postgresql.Driver #org.quartz.dataSource.myDS.URL: jdbc:postgresql://localhost/dev #org.quartz.dataSource.myDS.user: jhouse #org.quartz.dataSource.myDS.password: #org.quartz.dataSource.myDS.maxConnections: 5#============================================================================ # Configure Plugins #============================================================================org.quartz.plugin.triggHistory.class: org.quartz.plugins.history.LoggingJobHistoryPlugin org.quartz.plugin.jobInitializer.class: org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin org.quartz.plugin.jobInitializer.fileNames: quartz_data.xml org.quartz.plugin.jobInitializer.failOnFileNotFound: true org.quartz.plugin.jobInitializer.scanInterval: 120 org.quartz.plugin.jobInitializer.wrapInUserTransaction: false

其中org.quartz.plugin.jobInitializer.class: org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin會自動加載quartz_data.xml中的trigger和job到Scheduler

3、測試

import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar;import org.quartz.DateBuilder; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Matcher; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.SchedulerMetaData; import org.quartz.SimpleScheduleBuilder; import org.quartz.SimpleTrigger; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; import org.quartz.impl.calendar.AnnualCalendar; import org.quartz.impl.matchers.KeyMatcher; import org.slf4j.Logger; import org.slf4j.LoggerFactory;public class PluginExample {public static void run() throws Exception {Logger log = LoggerFactory.getLogger(PluginExample.class);SchedulerFactory sf = new StdSchedulerFactory();Scheduler sche = sf.getScheduler();sche.start();try {Thread.sleep(300000L);} catch (Exception e) {}sche.shutdown();SchedulerMetaData metaData = sche.getMetaData();log.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");}public static void main(String[] args) {PluginExample simpleExample = new PluginExample();try {simpleExample.run();} catch (Exception e) {e.printStackTrace();}} }


4、結果:

?

看,不用再把job和trigger手工加到Scheduler中去,它會自動加載XML中定義好的任務,需要做的只是start就行了。

?

?

轉自:?http://blog.csdn.net/evankaka

?Quartz存儲與持久化-基于quartz.properties的配置 見原博主另一文:https://blog.csdn.net/Evankaka/article/details/45556207

?

總結

以上是生活随笔為你收集整理的【Quartz】插件的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。