在开发web时 写一个定时器

 一、要完成的功能

      web项目中,由于对数据库的大批量数据的添加和删除,往往要求,服务器能在深夜完成对数据库的大量数据操作,此时就需要一个定时器来完成这项任务。

     本次进行的事例为,每天晚上两点将当天的数据插入到数据库中,并将已经过期的数据删除。

二、定时器的应用

2.1定时器的编写

    (1).Timer.Schdeule();

     要注意首先是定义一个Timer这个类型的对象,然后定时就在于它的schedule()方法;schedule()方法如果有三个参数,第一个参数是用来制定定时的事件,第二个参数是用来指定时间第一次发生的时间(可以是从此刻起的延迟时间,也可以是设定的固定时间),第三个参数用来指定循环周期);如果schedule()方法有两个参数,第一个参数是用来指定定时事件,第二个参数用来指定时间发生的时间(可以是从此刻起的延迟时间,也可以是设定的固定时间);

     如果有两个事件要定时发生,继续调用timer的schedule方法,前后不冲突。

     (2).TimerTask

     要定时的事件写在继承TimerTask这个类后,实现run()方法中。

public class timertsk {
    Timer timer;
    public timertsk() throws ParseException {

        timer = new Timer(); 
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Date date = sdf.parse("2014-06-19 00:02:00");  //固定第一次执行的时间
          timer.schedule(new MyTask(),date,24*3600*1000);  //每天晚上两点执行一次。
//      timer.schedule(new MyTask2(),1000,3000);         //如果有两个定时时间直接写在下面就好了    
    }

    static class MyTask extends TimerTask {             //继承TimerTask类 实例化里头的方法
  
	public void run() {
                  // TODO Auto-generated method stub
	System.out.println("INFO");
			
		}    

        }
    static class MyTask2 extends TimerTask {
    	String info = "second";  
	public void run() {
	// TODO Auto-generated method stub
	System.out.println(info);

        }

    public static void main(String args[]) throws ParseException{
    			new timertsk();
      	
    }
  
}

2.2定时器在web项目中的配置

 2.2.1启动加载方法

   由于定时器在web项目中,要求在项目启动的时候就将定时器开启。

   需要两步:1、将定时器写在一个Servlet的初始化方法init()中;

                     2、配置web.xml文件,当项目启动后,就加载这个Servlet。

public class TimerDeleteServlet extends HttpServlet {

	/**
	 *@author LT 
	 */
	private static final long serialVersionUID = 1L;
	 
	public void init(){
	
                  new timertsk();

}
	
	protected void doPost(HttpServletRequest req, HttpServletResponse resp){


	}

}

 在web.xml 文件中的配置

  < servlet >
     < servlet-name >taskservlet< / servlet-name >
    < servlet-class >com.task< /servlet-class >
    < load-on-startup >1(数字越小优先级越高)< /load-on-startup >
  < /servlet >

 2.2.2监听器方法

  监听器的编写

public class MyListen  implements ServletContextListener { 

    private Timer timer = null; 
     
    @Override 
    public void contextDestroyed(ServletContextEvent arg0) { 
        timer.cancel(); 
    } 

    @Override 
    public void contextInitialized(ServletContextEvent arg0) { 
        timer = new Timer(true); 
        //设置任务计划,启动和间隔时间 
        timer.schedule(new MyTask(), 0, 1000 * 10); 
    } 
} 

web.xml 中的配置

<listener> 
            <listener-class>com.rx.timer.MyListen</listener-class> 
</listener>

猜你喜欢

转载自liuting37.iteye.com/blog/2082740
今日推荐