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