Java Timer
  zw77MQd1kOsI 2023年11月02日 54 0


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>

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   54   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   109   0   0 Java
  8s1LUHPryisj   2024年05月17日   46   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
zw77MQd1kOsI