读书人

Java定时执行任务的实现步骤 Timer的几

发布时间: 2013-10-10 14:14:51 作者: rapoo

Java定时执行任务的实现方法 Timer的几种使用方式

Java定时执行任务的实现方法

?

?定时执行任务的三种方法:???

1)java.util.Timer.???
2)ServletContextListener.???
3)org.springframework.scheduling.timer.ScheduledTimerTask???
1)java.util.Timer???
  这个方法应该是最常用的,不过这个方法需要手工启动你的任务:???
Timer?timer=new?Timer();???
timer.schedule(new?ListByDayTimerTask(),10000,86400000);???
这里的ListByDayTimerTask类必须extends?TimerTask里面的run()方法。???
2)ServletContextListener???
这个方法在web容器环境比较方便,这样,在web?server启动后就可以???
自动运行该任务,不需要手工操作。???
将ListByDayListener?implements?ServletContextListener接口,在???
contextInitialized方法中加入启动Timer的代码,在contextDestroyed???
方法中加入cancel该Timer的代码;然后在web.xml中,加入listener:???
<listener>???
<listener-class>com.sysnet.demo.util.MyTimerTask</listener-class>???
</listener>???
3)org.springframework.scheduling.timer.ScheduledTimerTask???
  如果你用spring,那么你不需要写Timer类了,在schedulingContext-timer???
.xml中加入下面的内容就可以了:???
<?xml?version="1.0"?encoding="UTF-8"?>???
<!DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd">???
<beans>???
<bean?id="timer"?class="org.springframework.scheduling.timer.TimerFactoryBean">???
<property?name="scheduledTimerTasks">???
<list>???
<ref?local="MyTimeTask1"/>???
</list>???
</property>???
</bean>???
<bean?id="MyTimeTask"?class="com.qq.timer.ListByDayTimerTask"/>???
<bean?id="MyTimeTask1"?class="org.springframework.scheduling.timer.ScheduledTimerTask">???
<property?name="timerTask">???
<ref?bean="MyTimeTask"/>???
</property>???
<property?name="delay">???
<value>10000</value>???
</property>???
<property?name="period">???
<value>86400000</value>???
</property>???
</bean>???
</beans>???
下面给出方法2的一个例子供大家参考:???
  Java代码:???
  import?java.util.Timer;???
import?javax.servlet.ServletContextEvent;???
import?javax.servlet.ServletContextListener;???
public?class?MyTimerTask?implements?ServletContextListener{???
private?Timer?timer?=?null;???
@Override??
public?void?contextDestroyed(ServletContextEvent?event)?{???
//?TODO?Auto-generated?method?stub???
timer.cancel();???
event.getServletContext().log("定时器销毁");???
System.out.println("停止备份程序……");???
}???
@Override??
public?void?contextInitialized(ServletContextEvent?event)?{???
//在这里初始化监听器,在tomcat启动的时候监听器启动,考试,大提示可以在这里实现定时器功能???
timer?=?new?Timer(true);???
event.getServletContext().log("定时器已启动");//添加日志,可在tomcat日志中查看到???
timer.schedule(new?exportHistoryBean(event.getServletContext()),0,5*1000);//调用?exportHistoryBean,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时;???
}???
}???
import?java.util.Calendar;???
import?java.util.TimerTask;???
import?javax.servlet.ServletContext;???
public?class?exportHistoryBean?extends?TimerTask???
{???
private?static?final?int?C_SCHEDULE_HOUR?=?0;???
private?static?boolean?isRunning?=?false;???
private?ServletContext?context?=?null;???
public?exportHistoryBean(ServletContext?context)???
{???
this.context?=?context;???
}???
@Override??
public?void?run()???
{???
Calendar?c?=?Calendar.getInstance();???
if(!isRunning)???
{???
if(C_SCHEDULE_HOUR?==?c.get(Calendar.HOUR_OF_DAY))???
{???
isRunning?=?true;???
context.log("开始执行指定任务");???
isRunning?=?false;???
context.log("指定任务执行结束");???
}???
else??
{???
context.log("上一次任务执行还未结束");???
}???
}???
}???
}???
web.xml里加入一下代码:???
<listener>???
<listener-class>com.sysnet.demo.util.MyTimerTask</listener-class>???
</listener>? ?

读书人网 >编程

热点推荐