大连零基础网站建设培训班武汉seo网络优化公司
Spring对Timer的支持的核心是由ScheduledTimerTask和TimerFactoryBean类组成的。 ScheduledTimerTask类是对TimerTask的包装器实现,这样你就可以为这个任务定义触发器信息。使用 TimerFactoryBean类,你可以让Spring使用配置创建触发器,并为一组指定的ScheduledTimerTask bean自动创建Timer实例。
1、自定义timerTask,比如:定时输出ServletContext中的信息,本例中输出项目的绝对路径(比如:D:\software\apache-tomcat-6.0.33\webapps\spring\)
Java代码 




- publicclassBirthdayReminderTimerTaskextendsTimerTaskimplementsServletContextAware{
- /*通过实现ServletContextAware可获得servletContext*/
- privateServletContextservletContext;
- privatestaticLoggerlogger=Logger.getLogger(BirthdayReminderTimerTask.class);
- @Override
- publicvoidrun(){
- //logger.debug("BirthdayReminderTimerTaskisrunning");
- setServletContext(servletContext);
- try{
- System.out.println(this.servletContext.getRealPath("/"));
- }catch(Exceptione){
- e.printStackTrace();
- }
- }
- publicvoidsetServletContext(ServletContextservletContext){
- this.servletContext=servletContext;
- }
- }
public class BirthdayReminderTimerTask extends TimerTask implements ServletContextAware{/*通过实现ServletContextAware可获得servletContext*/private ServletContext servletContext;private static Logger logger = Logger.getLogger(BirthdayReminderTimerTask.class);@Overridepublic 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代码 




- <!--自定义任务-->
- <beanid="birthdayReminder"class="com.jep.task.BirthdayReminderTimerTask"></bean>
- <!--ScheduledTimerTask类是对TimerTask的包装器实现,这样你就可以为这个任务定义触发器信息。-->
- <beanid="birthdayReminderTimerTask"
- class="org.springframework.scheduling.timer.ScheduledTimerTask">
- <!--设置启动延迟-->
- <propertyname="delay">
- <value>3000</value>
- </property>
- <!--后续延迟-->
- <propertyname="period">
- <value>5000</value>
- </property>
- <!--指定触发器信息-->
- <propertyname="timerTask">
- <reflocal="birthdayReminder"/>
- </property>
- </bean>
- <!--使用TimerFactoryBean类,你可以让Spring使用配置创建触发器,并为一组指定的ScheduledTimerTaskbean自动创建Timer实例。-->
- <beanid="timerFactory"
- class="org.springframework.scheduling.timer.TimerFactoryBean">
- <propertyname="scheduledTimerTasks">
- <list>
- <reflocal="birthdayReminderTimerTask"/>
- </list>
- </property>
- </bean>
<!--自定义任务--> <bean id="birthdayReminder" class="com.jep.task.BirthdayReminderTimerTask"></bean> <!-- ScheduledTimerTask类是对TimerTask的包装器实现,这样你就可以为这个任务定义触发器信息。 --> <bean id="birthdayReminderTimerTask" class="org.springframework.scheduling.timer.ScheduledTimerTask"> <!-- 设置启动延迟 --> <property name="delay"> <value>3000</value> </property> <!-- 后续延迟 --> <property name="period"> <value>5000</value> </property> <!-- 指定触发器信息 --> <property name="timerTask"> <ref local="birthdayReminder" /> </property> </bean> <!-- 使用TimerFactoryBean类,你可以让Spring使用配置创建触发器,并为一组指定的ScheduledTimerTask bean自动创建Timer实例。 --> <bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean"> <property name="scheduledTimerTasks"> <list> <ref local="birthdayReminderTimerTask" /> </list> </property> </bean>
3、对于web项目,需要在web.xml中进行如下配置
Xml代码 




- <!--SpringApplicationContext配置文件的路径此参数用于后面的Spring-Contextloader-->
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:beans.xml</param-value>
- </context-param>
- <!--SpringApplicationContext载入-->
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>