首页
论坛
图书
开发资料
在线文档
网址
下载
联系我们
 新闻│Java│JavaScript│Eclipse│Eclipse 英文│J2EE│J2ME│J2SE│JSP│Netbeans│Hibernate│JBuilder│Spring│Struts
站内搜索: 请输入搜索关键词

当前页面: 开发资料首页 → Java 专题 → 如何在Web应用中启动后台任务的实例讲解

如何在Web应用中启动后台任务的实例讲解

摘要: 如何在Web应用中启动后台任务的实例讲解

</td> </tr> <tr> <td height="35" valign="top" class="ArticleTeitle">

我们常常在Web应用中需要启动一个自己写的服务,本文的目的是给你提供一个解决方案。

<table width="674" border="0"> <tr> <td width="396">

原理

本方案的原理是写一个实现了ServletContextListener接口的类,该类中有两个方法:

public void contextInitialized(ServletContextEvent sce)

它是在应用启动时调用;另一个方法是:

public void contextDestroyed(ServletContextEvent sce)

该方法是在应用结束时调用。

</td> <td width="268"> </td> </tr> </table>


把我们要启动的后台应用逻辑放在contextInitialized方法中实现;把释放后台应用占用资源的工作放在contextDestroyed来处理。但我们启动的后台任务常常是有要求的,比如时间,频率等,我在这里使用了一个开源组件:quartz。

步骤

1、写业务调用类:

<table cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1> <tr> <td class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6>
// DumbJob.java

import org.quartz.*;

import java.util.*;

  public class DumbJob implements Job

  {

    public DumbJob()

{

    }

    public void execute

(JobExecutionContext context)

      throws JobExecutionException

    {

     //在这里写业务处理代码。

    }

  }
</td> </tr> </table>


本类的主要功能是由quartz中调度类按照指定的规则进行调用执行必要的业务逻辑。

2、写调度类

<table cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1> <tr> <td class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6>
// TestShedule.java

import org.quartz.*;

import java.util.*;

public class TestShedule

{

    static SchedulerFactory

schedFact = new org.quartz.

impl.StdSchedulerFactory();

    static Scheduler sched;

   

    public static void run()throws Exception

{       

        sched = schedFact.getScheduler();

//获取调度管理器

          JobDetail jobDetail =

  new JobDetail("myJob",

      sched.DEFAULT_GROUP,

   DumbJob.class);

   //创建工作

        CronTrigger trigger =

new CronTrigger

("myTrigger","test","0/10 * * * * ?");

//创建触发器

        sched.scheduleJob(jobDetail, trigger);

//添加到调度管理器中

        sched.start();//启动调度管理器

    }

   

    public static void    

stop()throws Exception

{

        sched.shutdown();

    }

}
</td> </tr> </table>


本类的目的是设置调用规则,在这里我用了“0/10 * * * * ?”表示每10秒钟就执行一次。

3、编写服务启动类:

<table cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1> <tr> <td class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6>
//ServiceLoader.java

import javax.servlet.

ServletContextEvent;

import javax.servlet.

ServletContextListener;

public class ServiceLoader

implements ServletContextListener

{

    public void

contextInitialized

(ServletContextEvent sce)

{

        try{

            TestShedule.run();

        }catch(Exception ex)

{

System.out.println(ex.getMessage());

        }

    }

   

    public void contextDestroyed

(ServletContextEvent sce)

{

        try{

            TestShedule.stop();

        }catch(Exception ex)

{

 System.out.println(ex.getMessage());

        }

    }

}
</td> </tr> </table>


在contextInitialized中调用TestShedule.run()启动后台任务;在contextDestroyed中调用TestShedule.stop()停止后台任务。

4、部署服务启动类

在web.xml文件中增加如下一行配置:

<table cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1> <tr> <td class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6>
<?xml version="1.0"

encoding="UTF-8"?>

 web-app PUBLIC "-

//Sun Microsystems, Inc.

//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">



    root

    

        ServiceLoader



    

    

        index.html



    

</td> </tr> </table>


5、启动web服务即可。

总结

其实实现这个功能的方法很多,我在这里是应用了ServletContextListener接口和开源api quartz,希望能对你的开发有所帮助。
function TempSave(ElementID) { CommentsPersistDiv.setAttribute("CommentContent",document.getElementById(ElementID).value); CommentsPersistDiv.save("CommentXMLStore"); } function Restore(ElementID) { CommentsPersistDiv.load("CommentXMLStore"); document.getElementById(ElementID).value=CommentsPersistDiv.getAttribute("CommentContent"); } </td> </tr> <tr>


↑返回目录
前一篇: 纯jsp的单个文件上载代码
后一篇: Tomcat 5.5.11上手

首页 | 全站 Sitemap | 联系我们 | 设为首页 | 收藏本站
版权所有 Copyright © 2006-2007, Java 编程资料牛鼻站, All rights reserved