公司部分项目提出将某些项目进行静态化...所以在测试页面命中率和数据库访问量之后针对某些写的频率比较低和访问比较大页面进行静态化。当然也不是进行实时的静态化.这里需要使用定时器来进行静态化的控制.下面了解一下定时器的应用!
1.具体方法的了解
(1)Timer.schedule(TimerTask task,Date time)//安排在制定的时间执行指定的任务。
(2)Timer.schedule(TimerTask task,Date firstTime ,long period)//安排指定的任务在指定的时间开始进行重复的固定延迟执行.
(3)Timer.schedule(TimerTask task,long delay)//安排在指定延迟后执行指定的任务.
(4)Timer.schedule(TimerTask task,long delay,long period)//安排指定的任务从指定的延迟后开始进行重复的固定延迟执行.
(5)Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)//安排指定的任务在指定的时间开始进行重复的固定速率执行.
(6)Timer.scheduleAtFixedRate(TimerTask task,long delay,long period)//安排指定的任务在指定的延迟后开始进行重复的固定速率执行.
2.简单的测试方法
import java.io.IOException;
import java.util.Timer;
public class TimerTest {
public static void main(String[] args){
Timer timer = new Timer();
timer.schedule(new MyTask(), 1000, 2000);//在1秒后执行此任务,每次间隔2秒
while(true){//这个是用来停止此任务的,否则就一直循环执行此任务了
try {
int ch = System.in.read();
if(ch-'c'==0){
timer.cancel();//使用这个方法退出任务
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
static class MyTask extends java.util.TimerTask{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("我是来测试的。。我两秒出来一次");
}
}
}
这样,每隔两秒钟就会在控制台输出语句。
3.根据实际需要进行例子测试
由于我们刷新一些页面或者数据的时候.都会选择在一天的某个时候或者几天!这里就需要针对某个固定时间来制作这个定时器
public class TimerTest {
/**
* 每天固定时间更新
* 每天9点14分
*/
@Test
public void testRegular() {
new Date();
Timer timer = new Timer();
timer.schedule(new MyTask(getRegularDate("HH:mm", "11:21")),getRegularDate("HH:mm", "11:21"));//每天固定时间更新,每天11点21分
}
/**
*
* @author chenjinjie
*
*/
static class MyTask extends java.util.TimerTask{
private Date time;
public MyTask() {
}
public MyTask(Date time) {
this.time = time;
}
@Override
public void run() {
if(new Date().after(time))//这里主要是防止服务器重启之后发觉时间旧了会自动刷新一次
System.out.println("我是来测试的。。固定时间"+time);
}
}
/**
* 根据日期字符串获取日期对象,精确到当天凌晨零点零分,字符串格式:"YYYY-MM-DD"
* @param fomatStr 如(yyyy年MM月dd日 HH:mm)
* @param dateSource 源日期(String)
* @return
*/
public static Date getRegularDate(String formatData,String dateString){
SimpleDateFormat formatter = new SimpleDateFormat (formatData);
Date d = null;
try {
d = formatter.parse(dateString);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, d.getHours());
calendar.set(Calendar.MINUTE, d.getMinutes());
calendar.set(Calendar.SECOND, d.getSeconds());
Date time = calendar.getTime();
return time;
}
}
以上只是初步简单的使用..
4.定时器在JSP中的应用。在JSP中可以靠监听器和定时器的结合来解决某些问题
4.1 先来一个定时器的任务:
public class Task extends TimerTask {
private static final int C_SCHEDULE_HOUR = 0;
private static boolean isRunning = false;
private ServletContext context = null;
public Task() {
}
public Task(ServletContext context) {
this.context = context;
}
public void run() {
Calendar cal = Calendar.getInstance();
if (!isRunning) {
context.log("开始执行指定任务");
System.out.println("执行定时任务");
context.log("指定任务执行结束");
}
else {
context.log("上一次任务执行还未结束");
}
}
4.2然后监听器(注意实现的接口):
public class ContextListener
extends HttpServlet
implements ServletContextListener {
public ContextListener() {
}
private java.util.Timer timer = null;
public void contextInitialized(ServletContextEvent event) {
timer = new java.util.Timer(true);
event.getServletContext().log("定时器已启动");
timer.schedule(new Task(event.getServletContext()), 0, 10*60*1000); //开启后.每10分钟刷新一次
event.getServletContext().log("已经添加任务调度表");
}
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
event.getServletContext().log("定时器销毁");
}
}
4.3最后配置XML文件。
web-app 标签内添加
<listener>
<listener-class>cn.read.web.listener.ContextListener </listener-class>
</listener>
这样启动Tomcat后就会在控制台输出当前日期。。
5.项目的具体使用和感想
这只是在项目的初步规划.可能实行过程中还会出现很多问题.比如网络和服务器重启等...不过会在后面开发中继续努力改进.使其功能更加完善.
分享到:
相关推荐
java web 定时器例子
Java_Web定时器使用
Java定时器在Web中的应用.doc
项目需要,开发一个简单的定时器,结合spring
spring和java的定时器 BeanFactory beans=new FileSystemXmlApplicationContext("WebRoot/WEB-INF/applicationContext1.xml");
java定时器(java.util.Timer)有定时执行计划任务的功能,通过设定定时器的间隔时间,会自动在此间隔时间后执行预先安排好的任务(java.util. TimerTask)
web定时器组件,该组件为java定时器基本应用程序!
本文详细介绍了java web中启动定时器的两种方法,供学习者参考。
我们通常写的timer都是用main方法写的定时器,但同样我们也需要根据服务器启动后定时器也启动的 定时执行任务。不过有个致命伤就是集群方面跟quartz不能比,此方法代码做参考不错,如果要用,那么这个方法在一台...
javaweb定时器,需要tomcat6,部署后启动tomcat,访问index.jsp页面,定时器工作,kill Tomcat服务结束工作,本人用的Sql2000数据库,可以自行更改。完整工程源代码。
绍如何在JAVA WEB程序中添加定时器
java web项目,使用servlet实现定时器功能,代码请详见附件
java游戏服务器中,需要使用到的定时器功能 现在要讲解的是一个quartz-all-1.8.6.jar另外一个是ScheduledThreadPoolExecutor。
javaweb的几种定时方式,有助于了解定时的工作原理。对于定时器不了解的朋友可以看看
有 commons-collections.jar commons-logging.jar quartz-all-1.6.1-RC1....spring.jar spring-webmvc-struts.jar standard-1.0.6.jar 就做spring的定时器就够了 有hibernate 就要修改commons-collections.jar架 包
这是Java Webproject中实现定时器的学习文档
本篇文章主要介绍了Java中Spring使用Quartz任务调度定时器,具有一定的参考价值,有兴趣的可以了解一下。
java socket client 断线重连的简单实现 有什么意见可以提哦
只需要在web.xml文件中添加监听器listener,然后加入附件中的文件,并将lstener指向所添加的文件TimerTaskListener,定时任务的研发便可轻松搞定!
在Java Web程序中加入定时任务,这里介绍两种方式使用监听器注入,使用Spring注解@Scheduled注入,需要的朋友可以参考下