网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.java2html_src_0.8alpha源代码发.
.用servlet实现一个简单的购物车程.
.JBuilder2005实现重构之类继承体.
.VJ6.0的使用方法(1)概述、VJ6的获.
.Guice与Spring框架的区别.
.Java中使用正则表达式实现字符串.
.JDK1.3 中的本地绘制支持.
.使用.net Remtoing并行计算.
.实例学习 Struts.
.我为什么没有使用Spring.
.JAVA新手必备:Java基础之关键字.
.实战角度比较EJB2和EJB3的架构异.
.tan 方法.
.JavaBean与EJB有何不同.
.在Java编程中的“模式思想”与框.
.最大化J2EE和数据库交互操作的性.
.Mark Spritzler的SCJD学习指导.
.非常有用的操作Internet的API函数.
.幸福的联姻:Java 和 Python.
.从头到脚跟你解释什么是Hibernate.

Web App用Quartz实现java schedule job

发表日期:2008-1-5



  关于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
上一篇:Apache与Tomcat整合问题的新方法 人气:752
下一篇:前车之覆,后车之鉴 --开源项目经验谈 人气:564
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐