您的位置:首页 > 编程语言 > Java开发

java的web项目中使用定时器

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

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

 

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

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

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

在servlet中启动定时器
一,继承HttpServlet的写法:

1,Servlet
import java.io.IOException;   
import java.util.Timer;   
import javax.servlet.RequestDispatcher;   
import javax.servlet.ServletContext;   
import javax.servlet.ServletException;   
import javax.servlet.http.HttpServlet;   
import javax.servlet.http.HttpServletRequest;   
import javax.servlet.http.HttpServletResponse;   
  

  
public class ConvergeDataServletextends HttpServlet {   

  
    private static
final long serialVersionUID = 1L;   
  
    private Timer timer1 =
null;   
       
    private Task task1;   
       
    /**
      * Constructor of the object.
      */  
    public ConvergeDataServlet() {   
        super();   
     }   
  
    /**
      * Destruction of the servlet.

      */  
    public void destroy() {   
        super.destroy();   
        if(timer1!=null){   
             timer1.cancel();   
         }   
     }   
  
       
    public void doGet(HttpServletRequest request, HttpServletResponse response)   
            throws ServletException, IOException {   
           
     }   
  
       
    public void doPost(HttpServletRequest request, HttpServletResponse response)   
            throws ServletException, IOException {   
         doGet(request, response);          
     }   
  
    // init方法启动定时器   
    public void init()throws ServletException {   

           
         ServletContext context = getServletContext();   
           
        // (true为用定时间刷新缓存)   
         String startTask = getInitParameter("startTask");   
                   
        // 定时刷新时间(分钟)   
         Long delay = Long.parseLong(getInitParameter("delay"));   
           
        // 启动定时器   
        if(startTask.equals("true")){   
             timer1 = new Timer(true);   
             task1 = new Task(context);   
             timer1.schedule(task1, delay * 60 *
1000, delay * 60 * 1000);   
         }   
     }   
}   
2,任务

import java.util.TimerTask;   

  
import javax.servlet.ServletContext;   
  
public class Task extends TimerTask{   
  
    private ServletContext context;   
       
    private static boolean isRunning = true;   
       
    public Task(ServletContext context){   
        this.context = context;   
     }   
       
           
    @Override  
    public void run() {   
        if(isRunning){   
             
         }   
     }   
  
}   

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>
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java web 定时器