java的web项目中使用定时器

  • Post author:
  • Post category:java


之前接触过程序中的定时任务,但是没去自己亲自尝试过。终于这次抽空搞了一下。(一定要自己去操作,才能长经验,光看到过是没用的)

以下是两种方法,我使用的是监听的方法。

JAVA WEB定时器,定时器的启动一般随web server的启动而启动,一般有两种方法.

方法一:在web.xml里配置一个Servlet,继承HttpServlet,并设置其随web server的启动而启动。然后在该Servlet的init()方法里启动定时器,在destory()方法里销毁定时器。


方法二:在web.xml里配置一个Listener,继承ServletContextListener,然后在该Listener的初始化方法里启动定时器,在其销毁的方法朝左销毁定时器。

在servlet中启动定时器


一,继承HttpServlet的写法:



1,Servlet


  1. import

    java.io.IOException;

  2. import

    java.util.Timer;

  3. import

    javax.servlet.RequestDispatcher;

  4. import

    javax.servlet.ServletContext;

  5. import

    javax.servlet.ServletException;

  6. import

    javax.servlet.http.HttpServlet;

  7. import

    javax.servlet.http.HttpServletRequest;

  8. import

    javax.servlet.http.HttpServletResponse;

  9. public


    class

    ConvergeDataServlet

    extends

    HttpServlet {

  10. private


    static


    final


    long

    serialVersionUID = 1L;

  11. private

    Timer timer1 =

    null

    ;

  12. private

    Task task1;

  13. /**

  14. * Constructor of the object.

  15. */

  16. public

    ConvergeDataServlet() {

  17. super

    ();
  18. }

  19. /**

  20. * Destruction of the servlet.


  21. */

  22. public


    void

    destroy() {

  23. super

    .destroy();

  24. if

    (timer1!=

    null

    ){
  25. timer1.cancel();
  26. }
  27. }

  28. public


    void

    doGet(HttpServletRequest request, HttpServletResponse response)

  29. throws

    ServletException, IOException {
  30. }

  31. public


    void

    doPost(HttpServletRequest request, HttpServletResponse response)

  32. throws

    ServletException, IOException {
  33. doGet(request, response);
  34. }

  35. // init方法启动定时器

  36. public


    void

    init()

    throws

    ServletException {
  37. ServletContext context = getServletContext();

  38. // (true为用定时间刷新缓存)
  39. String startTask = getInitParameter(

    “startTask”

    );

  40. // 定时刷新时间(分钟)
  41. Long delay = Long.parseLong(getInitParameter(

    “delay”

    ));

  42. // 启动定时器

  43. if

    (startTask.equals(

    “true”

    )){
  44. timer1 =

    new

    Timer(

    true

    );
  45. task1 =

    new

    Task(context);
  46. timer1.schedule(task1, delay *

    60

    *

    1000

    , delay *

    60

    *

    1000

    );
  47. }
  48. }
  49. }


2,任务

  1. import java.util.TimerTask;
  2. import javax.servlet.ServletContext;
  3. public class Task extends TimerTask{
  4. private ServletContext context;
  5. private static boolean isRunning = true;
  6. public Task(ServletContext context){
  7. this.context = context;
  8. }
  9. @Override
  10. public void run() {
  11. if(isRunning){
  12. }
  13. }
  14. }


3,web.xml中的配置

< servlet >

< servlet-name >taskservlet< / servlet-name >

< servlet-class >com.task< /servlet-class >

< init-param >

< param-name >startTask< /param-name >

< param-value >true< /param-value >

< /init-param >

< init-param >

< param-name >intervalTime< /param-name >

< param-value >1< /param-value >

< /init-param >

< load-on-startup >300< /load-on-startup >

< /servlet >


二,继承ServletContextListener


1,定时器

/**

*

*/

package com.annlee.website.util;

import java.util.Timer;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

/**

* @author Administrator 定时器

*/

public class TimerListener implements ServletContextListener {

private Timer timer;

private AnnleeTimerTask task;

public void contextDestroyed(ServletContextEvent arg0) {


timer.cancel();

System.out.println(“定时器已销毁”);

}

public void contextInitialized(ServletContextEvent event) {

timer = new java.util.Timer(true);

task = new AnnleeTimerTask(event.getServletContext());

System.out.println(“定时器已启动”);

timer.schedule(task, 0, 60 * 1000);

System.out.println(“已经添加任务调度表”);

}

}


2,任务

package com.annlee.website.util;

import java.util.Calendar;

import java.util.TimerTask;

import javax.servlet.ServletContext;

import com.annlee.website.model.service.member.UsmAccessDataService;

/**

* 定时器的任务

*/

public class AnnleeTimerTask extends TimerTask {

private ServletContext context;

public AnnleeTimerTask(ServletContext context){


this.context = context;

}

public void run() {

//你要执行的操作

}

}


3,web.xml中的配置

<listener>

<listener-class>

com.annlee.website.util.TimerListener

</listener-class>

</listener>