关于quartz
1 下载quartz java包copy到web-inf/lib下
2 建立 scheduler初始化servlet
在web.xml里加入
<servlet>
<servlet-name>initializer</servlet-name>
<servlet-class>
com.nova.colimas.web.action.startupservlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
初始化servlet代码如下:
public class startupservlet extends httpservlet {
public void init(servletconfig cfg) throws
javax.servlet.servletexception {
initscheduler(cfg);
return;
}
protected void initscheduler(servletconfig cfg){
logger.info("quartz init servlet loaded, initializing scheduler...");
// start now
try{
// create an default instance of the scheduler
scheduler scheduler = stdschedulerfactory.getdefaultscheduler();
//将scheduler存入serlvet上下文。
cfg.getservletcontext().setattribute(constants.scheduler_key,scheduler);
}catch(exception e){
logger.error("quartz init servlet failed");
}
}}
3 程序配置一个schedule job
/**
* @author tyrone
*
* todo to change the template for this generated type comment go to
* window - preferences - java - code style - code templates */public class batcheditaction extends action implements privilegedaction {
private static logger logger = null;
private scheduler scheduler=null;
public actionforward execute(actionmapping mapping,
actionform form,
httpservletrequest request,
httpservletresponse response)
throws exception{
actionmessages errors=new actionmessages();
logger = logger.getlogger(this.getclass());
//获得servlet上下文
servletcontext ctx =
request.getsession().getservletcontext();
//获得scheduler对象
scheduler=(scheduler)ctx.getattribute(constants.scheduler_key);
//根据form属性建立job
createjob(form);
try{
logger.info("scheduler starting up...");
//启动scheduler。
scheduler.start();
}catch(exception e){
logger.error("scheduler get error");
}
return mapping.findforward("success");
}
/**
* create a job based on form info.
* @param form
* @return
*/ protected void createjob(actionform form) throws exception{
batchinfoform batchinfo=(batchinfoform)form;
string classname=batchinfo.getfile();
simpletrigger strigger=null;
jobdetail jobdetail=null;
calendar cal=null;
//如果是一天一次的job
if (batchinfo.getfrequency().equalsignorecase("oncedaily")){
logger.info("batch run oncedaily");
cal = new annualcalendar();
//add calendar to the scheduler
/*
* setup a trigger to start firing now, with a null end date/time,
* repeat forever and have (hour*60+ minute)*60000 ms between each firing.
*/
//开始时间:11:45
string[] time=batchinfo.getdailystarttime().split(":");
java.util.calendar rightnow = java.util.calendar.getinstance();
rightnow.set(java.util.calendar.hour_of_day,new integer(time[0]).intvalue());
rightnow.set(java.util.calendar.minute,new integer(time[1]).intvalue());
//间隔24小时
long repeatinterval=24*60*60000;
strigger = new simpletrigger("trigger",
scheduler.default_group, rightnow.gettime(), null,
simpletrigger.repeat_indefinitely, repeatinterval);
}
}
// trigger 关联一个calendar, batchinfo.getname()唯一表示一个calendar
strigger.setcalendarname(batchinfo.getname());
scheduler.addcalendar(batchinfo.getname(), cal, true, true);
try{
//job类名为com.nova.colimas.job.test
jobdetail = new jobdetail(classname,
scheduler.default_group, class.forname(classname));
//job关联一个trigger,加入scheduler
scheduler.schedulejob(jobdetail, strigger);
}catch(classnotfoundexception ex){
logger.error(ex);
throw new exception();
}
return ;
}}
4 job代码,job必须继承org.quartz.job
package com.nova.colimas.job;import org.apache.log4j.logger;
import org.quartz.job;
import org.quartz.jobexecutioncontext;
import org.quartz.jobexecutionexception;
public class test implements job {
private static logger logger = null;
public void execute(jobexecutioncontext arg0) throws jobexecutionexception {
// 定时运行。
logger = logger.getlogger(this.getclass());
logger.info("test job is running");
}}
5 运行结果
[framework] 2005-08-23 11:45:29,440 - com.nova.colimas.job.test -215700 [defaultquartzscheduler_worker-0] info com.nova.colimas.job.test - test job is running
闽公网安备 35060202000074号