// 在啟動(dòng)之前等待指定長(zhǎng)度的時(shí)間
Thread delayedScheduler =
new Thread(new DelayedSchedulerStarted (
scheduler, m_startupDelay));
//give the scheduler a name. All good code needs a name
//給任務(wù)調(diào)度器命名。好的代碼總該有名字!
delayedScheduler.setName("Delayed_Scheduler");
//Start out scheduler
//啟動(dòng)任務(wù)調(diào)度器
delayedScheduler.start();
}
} catch (Exception e){
e.printStackTrace();
}
sm_scheduler = scheduler;
}
配置過程的第二步是在web.xml中加入用來初始化Quartz servlet(org.quartz.ee.servlet.QuartzInitializerServlet)的內(nèi)容,因?yàn)樾枰鼘chedulerFactory添加到ServletContext中,以便在我們的Struts插件中可以訪問。SchedulerFactory就是我們?cè)赟truts插件中獲得Scheduler對(duì)象的來源。除了struts-config.xml 和web.xml之外,還要在web應(yīng)用的classes目錄下放置一個(gè)quartz.properties文件。此文件的位置也可以在web.xml中作為QuartzInitializerServlet的啟動(dòng)參數(shù)來指定。
QuartzInitializer
Quartz Initializer Servlet
org.quartz.ee.servlet.QuartzInitializerServlet
1
shutdown-on-unload
true
start-scheduler-on-load
false
這里其實(shí)完全可以不使用Struts和SchedulerPlugIn,但如果將來決定要以其它的任務(wù)調(diào)度框架替換Quartz的話,額外的抽象層就很有用了。長(zhǎng)遠(yuǎn)看來,讓一切保持松散耦合總會(huì)使工作變得容易些。如果你使用其它MVC框架,也可以用SchedulerPlugIn.init()方法中的代碼達(dá)到同樣的效果。此外,還可以用Servlet 2.3規(guī)范中的ServletContextListener來實(shí)現(xiàn)同樣的初始化過程。
到此為止web應(yīng)用已配置完畢,我們可以創(chuàng)建一個(gè).war文件并部署到服務(wù)器上,從控制臺(tái)觀察SchedulerPlugIn的輸出信息。然而在此之前,讓我們先看看如何向任務(wù)調(diào)度器提交一項(xiàng)任務(wù)。
我們可以從web應(yīng)用中的任何類訪問SchedulerPlugIn的唯一實(shí)例,并調(diào)度一些要執(zhí)行的工作。首先需要一個(gè)Trigger(觸發(fā)器)對(duì)象來告訴任務(wù)何時(shí)運(yùn)行、每隔多久運(yùn)行一次。Quartz支持多種觸發(fā)器,在這個(gè)例子中我們使用CronTrigger。
Trigger trigger = new CronTrigger("trigger1", "group1");
trigger.setCronExpression("0 0 15 ? * WED");
以上的觸發(fā)器會(huì)在每周三的下午3點(diǎn)執(zhí)行指定任務(wù),F(xiàn)在我們只要?jiǎng)?chuàng)建一個(gè)JobDetail對(duì)象,并把它和上面的觸發(fā)器一起傳遞給SchedulerPlugIn的scheduleWork()方法。
JobDetail jobDetail =
new JobDetail("Hello World Job",
"Hello World Group",
HelloWorld.class,
true, true, true);
//Schedule The work
//調(diào)度這項(xiàng)任務(wù)
SchedulerPlugIn.scheduleWork(scheduledJobDetail, trigger);
實(shí)際工作在何處?
相關(guān)推薦:計(jì)算機(jī)等級(jí)考試二級(jí)Java經(jīng)典算法大全匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |