Spring对Timer的支持的核心是由ScheduledTimerTask和TimerFactoryBean类组成的。 ScheduledTimerTask类是对TimerTask的包装器实现,这样你就可以为这个任务定义触发器信息。使用 TimerFactoryBean类,你可以让Spring使用配置创建触发器,并为一组指定的ScheduledTimerTask bean自动创建Timer实例。
1、自定义timerTask,比如:定时输出ServletContext中的信息,本例中输出项目的绝对路径(比如:D:\software\apache-tomcat-6.0.33\webapps\spring\)
Java代码
public class BirthdayReminderTimerTask extends TimerTask implements ServletContextAware{
/*通过实现ServletContextAware可获得servletContext*/
private ServletContext servletContext;
private static Logger logger = Logger.getLogger(BirthdayReminderTimerTask.class);
@Override
public void run() {
// logger.debug("BirthdayReminderTimerTask is running");
setServletContext(servletContext);
try {
System.out.println(this.servletContext.getRealPath("/"));
} catch (Exception e) {
e.printStackTrace();
}
}
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
}
public class BirthdayReminderTimerTask extends TimerTask implements ServletContextAware{
/*通过实现ServletContextAware可获得servletContext*/
private ServletContext servletContext;
private static Logger logger = Logger.getLogger(BirthdayReminderTimerTask.class);
@Override
public void run() {
// logger.debug("BirthdayReminderTimerTask is running");
setServletContext(servletContext);
try {
System.out.println(this.servletContext.getRealPath("/"));
} catch (Exception e) {
e.printStackTrace();
}
}
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
}
2、在spring的bean配置文件中配置,当系统加载该文件时,配置的定时器将自动启动,同时被spring管理。
Xml代码
3、对于web项目,需要在web.xml中进行如下配置
Xml代码