定时器MemberMonthsListener类:
package com.yyt.interceptor.member;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* 会员月龄更新监听器 每隔一个星期执行一次
* @author Administrator
*
*/
public class MemberMonthsListener implements ServletContextListener{
private Timer timer = null;
/**
* 监听器销毁
*/
@Override
public void contextDestroyed(ServletContextEvent arg0) {
timer.cancel();
System.out.println("----------------更新月龄监听器销毁---------------");
}
/**
* 监听器初始化
* java.util.Timer.schedule(TimerTask task, long delay, long period)
* 调用0表示任务无延迟
* 5*1000表示每隔5秒执行任务
* 60*60*1000表示一个小时
* 24*60*60*1000表示一天。
*/
@Override
public void contextInitialized(ServletContextEvent event) {
timer = new Timer();
new MemberTimer(event.getServletContext()).run();
System.out.println("定时器已启动,已经执行一次");
timer.schedule(new MemberTimer(event.getServletContext()),0,24*60*60*1000*7);
event.getServletContext().log("已经添加任务");
System.out.println("定时器已添加");
}
}
被调用的MemberTimer类的写法,注意extends TimerTask,并且在run()方法中执行业务:
package com.yyt.interceptor.member;
import java.util.TimerTask;
import javax.servlet.ServletContext;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* 定时任务
* @author Administrator
*
*/
public class MemberTimer extends TimerTask{
private ServletContext context = null;
public MemberTimer(ServletContext context){
this.context = context;
}
@Override
public void run() {
ApplicationContext ac= new ClassPathXmlApplicationContext("applicationContext.xml");
UpdateMember updateMember = (UpdateMember) ac.getBean("updateMember");
updateMember.update();
}
}
最后,在web.xml中设置监听器
- <listener>
- <listener-class>com.yyt.interceptor.member.MemberMonthsListener</listener-class>
- </listener>