程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> quartz完成准時功效實例詳解(servlet准時器設置裝備擺設辦法)

quartz完成准時功效實例詳解(servlet准時器設置裝備擺設辦法)

編輯:關於JAVA

quartz完成准時功效實例詳解(servlet准時器設置裝備擺設辦法)。本站提示廣大學習愛好者:(quartz完成准時功效實例詳解(servlet准時器設置裝備擺設辦法))文章只能為提供參考,不一定能成為您想要的結果。以下是quartz完成准時功效實例詳解(servlet准時器設置裝備擺設辦法)正文


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集成在一路,並停止了封裝,應用起來照樣很便利的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved