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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Quartz实现定时功能 job.xml文件的配置

發布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Quartz实现定时功能 job.xml文件的配置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 使用Quartz實現定時功能? ??
  • ? ??
  • Quartz是一個完全由java編寫的開源作業調度框架,具體的介紹可到http://www.opensymphony.com/quartz/官方網站查看。 ??
  • ? ??
  • Quartz的幾個核心的接口和類為: ??
  • ? ??
  • Job接口:自己寫的“定時程序”實現此接口的void?execute(JobExecutionContext?arg0)方法,Job還有一類為有狀態的StatefulJob接口,如果我們需要在上一個作業執行完后,根據其執行結果再進行下次作業的執行,則需要實現此接口。 ??
  • Trigger抽象類:調度類(Scheduler)在時間到時調用此類,再由trigger類調用指定的定時程序。 ??
  • Quertz中提供了兩類觸發器為:SimpleTrigger,CronTrigger。前者用于實現比較簡單的定時功能,例如幾點開始,幾點結束,隔多長時間執行,共執行多少次等,后者提供了使用表達式來描述定時功能,因此適用于比較復雜的定時描述,例如每個月的最后一個周五,每周的周四等。 ??
  • JobDetail類:具體某個定時程序的詳細描述,包括Name,Group,JobDataMap等。 ??
  • JobExecutionContext類:定時程序執行的run-time的上下文環境,用于得到當前執行的Job的名字,配置的參數等。 ??
  • JobDataMap類:用于描述一個作業的參數,參數可以為任何基本類型例如String,float等,也可為某個對象的引用. ??
  • JobListener,TriggerListener接口:用于監聽觸發器狀態和作業掃行狀態,在特寫狀態執行相應操作。 ??
  • JobStore類:在哪里執行定進程序,可選的有在內存中,在數據庫中。 ??
  • ? ??
  • 簡單的定時程序: ??
  • ? ??
  • public?class?TestJob?implements?Job ??
  • { ??
  • ???public?TestJob(){} ??
  • ???public?void?execute(JobExecutionContext?arg0)?throws?JobExecutionException ??
  • ???{ ??
  • ??????String?name?=?context.getJobDetail().getJobDataMap().getString("name"); ??
  • ??????System.out.println("job?executing..."+name);???} ??
  • } ??
  • ? ??
  • public?class?QuartzTest ??
  • { ??
  • ?public?static?void?main(String[]?args) ??
  • ?{ ??
  • ????QuartzTest?test?=?new?QuartzTest(); ??
  • ????try??
  • ???{ ??
  • ??????test.startSchedule(); ??
  • ???} ??
  • ??catch?(Exception?e) ??
  • ??{ ??
  • ?????e.printStackTrace(); ??
  • ??} ??
  • ?} ??
  • ?public?void?startSchedule()?throws?Exception ??
  • ?{ ??
  • ?????Scheduler?scheduler?=?StdSchedulerFactory.getDefaultScheduler(); ??
  • ?????JobDetail?jobDetail?= ??
  • ??????new?JobDetail("testJob",?Scheduler.DEFAULT_GROUP,?TestJob.class); ??
  • ??????//結束時間????? ??
  • ?????long?end?=?System.currentTimeMillis()?+?9000L; ??
  • ????//執行10次,每3秒執行一次,到9秒后結束 ??
  • ?????SimpleTrigger?trigger?=?new?SimpleTrigger("test",null,new?Date(),new?Date(end),10,3000L); ??
  • ??????scheduler.scheduleJob(jobDetail,?trigger); ??
  • ?????scheduler.start(); ??
  • ?} ??
  • } ??
  • ? ??
  • 執行上面這個類基本實現了一個簡單的定時程序。但問題是現在這個類只能應用在application中,在web環境里執行還需要添加一些配置,例如添加servlet,添加配置文件quartz.properties或者quartz-job.xml(在XML文件里以配置方式定義triiger,定時描述等)。 ??
  • ? ??
  • web應用中使用 ??
  • ? ??
  • 在web.xml中添加QuartzInitializerServlet,Quartz為能夠在web應用中使用,提供了一個QuartzInitializerServlet和一個QuartzInitializerListener,用于在加載web應用時,對quartz進行初始化。我在使用servlet時加載成功,在使用listener時不成功,不知道怎么回事? ??
  • ??
  • ? ??
  • ??
  • servlet配置:? ??
  • <servlet>? ??
  • ???<servlet-name>QuartzInitializer</servlet-name>? ??
  • ???<servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>? ??
  • ???<init-param> ??
  • ?????<param-name>shutdown-on-unload</param-name> ??
  • ?????<param-value>true</param-value> ??
  • ???</init-param> ??
  • ???<init-param> ??
  • ????<param-name>config-file</param-name> ??
  • ????<param-value>quartz.properties</param-value>? ??
  • ???</init-param> ??
  • ???<load-on-startup>2</load-on-startup> ??
  • ?</servlet> ??
  • listener配置可以看源碼,主要的上面的參數配置為<context-param>,再加一個<listener>. ??
  • ? ??
  • 上面提到了quartz.properties,這是自行指定的,Quartz提供了一個默認的配置文件,可以滿足基本的j2se應用,如果在web應用中,我們想把job,trigger配置都寫到文件中,就需要自己來寫,并指定在初始化時加載我們自己的quratz.properties,位置放在classes下。 ??
  • ? ??
  • #============================================================================ ??
  • #?Configure?Main?Scheduler?Properties?? ??
  • #============================================================================ ??
  • org.quartz.scheduler.instanceName?=?org.quartz.scheduler.instanceId?=?AUTO ??
  • #============================================================================ ??
  • #?Configure?ThreadPool?? ??
  • #============================================================================ ??
  • org.quartz.threadPool.class?=?org.quartz.simpl.SimpleThreadPool ??
  • org.quartz.threadPool.threadCount?=?3??
  • org.quartz.threadPool.threadPriority?=?5??
  • #============================================================================ ??
  • #?Configure?Plugins? ??
  • #============================================================================ ??
  • org.quartz.plugin.triggHistory.class?=?org.quartz.plugins.history.LoggingJobHistoryPlugin ??
  • org.quartz.plugin.jobInitializer.class?=?org.quartz.plugins.xml.JobInitializationPlugin ??
  • org.quartz.plugin.jobInitializer.fileName?=?/scheduler/quartz_jobs.xml ??
  • org.quartz.plugin.jobInitializer.overWriteExistingJobs?=?true??
  • org.quartz.plugin.jobInitializer.failOnFileNotFound?=?true??
  • org.quartz.plugin.jobInitializer.scanInterval?=?10??
  • ? ??
  • quartz要使用插件來加載自己的xml配置文件,上邊我們指定了在初始化時加載classes/scheduler/quartz_jobs.xml,默認的是加載classes/quartz_jobs.xml文件。 ??
  • ? ??
  • quartz_jobs.xml文件: ??
  • <?xml?version='1.0'?encoding='utf-8'?> ??
  • <quartz> ??
  • ?<job> ??
  •   ?<job-detail> ??
  • ??  <name>test</name> ??
  • ??  <group>DEFAULT</group> ??
  • ??  <description>testJobhere</description> ??
  • ??  <job-class>TestJob</job-class> ??
  • ??  <job-data-map?allows-transient-data="true"> ??
  • ???  <entry> ??
  • ????  <key>name</key> ??
  • ???  ?<value>test</value> ??
  • ???  </entry> ??
  • ???</job-data-map> ??
  • ?  </job-detail> ??
  •   ?<trigger> ??
  • ?????????????<cron> ??
  • ??????????????????<name>testCron</name> ??
  • ??????????????????<group>DEFAULT</group> ??
  • ??????????????????<job-name>test</job-name> ??
  • ?????????????????<job-group>DEFALUT</job-group> ??
  • ?????????????????<cron-expression>0/3?*?*?*?*??</cron-expression> ??
  • ?????????????</cron> ??
  • ???????</trigger> ??
  •  ?</job> ??
  • </quartz> ??
  • ??
  • ? ??
  • 上面配置了一個作業,并聲明一個參數Name;配置了一個CronTrigger,每三秒執行一次。如果要配置SimpleTrigger?,可以使用<simple>標簽。 ??
  • ? ??
  • 上面與Job對應的類為TestJob,源碼為: ??
  • public?class?TestJob?implements?Job ??
  • { ??
  • ?public?TestJob(){} ??
  • ?public?void?execute(JobExecutionContext?context)?throws?JobExecutionException ??
  • ?{ ??
  • ?????String?name?=?context.getJobDetail().getJobDataMap().getString("name"); ??
  • ?????System.out.println("job?executing..."+name); ??
  • ?} ??
  • } ??
  • ? ??
  • 在quartz_job.xml文件中還可以指定TriggerListener,JobListener等,可以使用<trigger-listener>,<job-listener>標簽來指定。 ??
  • ? ??
  • 由于quartz目前文檔不是很多,大部分都是看源碼。總體看Quartz提供的CronTrigger使用表達式方式描述定時規律這個功能還是很強大的,在其源碼中有很多例子。 ??
  • ? ??
  • spring已經把quartz集成在一起,并進行了封裝,使用起來還是很方便的。? ??
  • ??
  • 轉載于:https://www.cnblogs.com/liaomin416100569/archive/2010/04/13/9331850.html

    總結

    以上是生活随笔為你收集整理的Quartz实现定时功能 job.xml文件的配置的全部內容,希望文章能夠幫你解決所遇到的問題。

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