在北京这边实习也一个多月了,也接触了不少东西,今天领导开会,说服务器压力太大,客户很不满意,访问速度上要求很苛刻,我们项目里的一些操作,没有必要写成动态的都改写成静态的,每天定时更新一下静态html页面里面的内容(因为客户每天会定时更新一些内容,而且只更新一次)。
听得我好蒙啊,我头一次听说java 的定时操作呢!要命的东西,好坑的啊,晚上抽出了时间,学习了一下java的定时器,也就是一些基本的操作。
java定时器主要用到两个类:Timer(计划任务调度类)和TimerTask(具体任务类)
先介绍TimerTask类吧,这里我们并不是直接去用这个类,这个类是一个抽象类,我们要设置我们自己的计划任务的具体内容,我们可以自定义一个MyTimerTask(名字可以自定义的哈)类,但是必须要继承TimerTask类,这样继承过来之后,就会默认重载一个run方法,而这个方法的正是我们详细的计划任务方法,我们可以直接把我们想要做的操作,写在这个方法里面,这是在最直接的方式了,要是要做的任务很多很多,也可以在写别的方法或者类,我们在这个run方法里面去调用就行。
然后就是Timer类的,呵呵,直接用呗,对于这个类的使用还是参照着下面我给的代码吧!这里我介绍一些这个类的基本信息:
Timer类的构造方法:
好像只有一个,Timer() //构造方法不必多解释,实例化用途的
常用的方法:
方法摘要 | |
---|---|
终止此计时器,丢弃所有当前已安排的任务。 | |
从此计时器的任务队列中移除所有已取消的任务。 | |
安排在指定的时间执行指定的任务。 | |
安排指定的任务在指定的时间开始进行重复的固定延迟执行。 | |
安排在指定延迟后执行指定的任务。 | |
安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。 | |
安排指定的任务在指定的时间开始进行重复的固定速率执行。 | |
安排指定的任务在指定的延迟后开始进行重复的固定速率执行。 |
这里的话,我简单介绍定时器的触发以及使用:
使用,看看下面的代码,结合上述所属,应该很明确了!小弟不才,如发现错误希望纠正哈!
public class MyTimerTask extends TimerTask {
private static int i = 0;
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("--------------" + (i++) + "---------------");
}
}
public class Mytimer {
public static void main(String args[]) throws ParseException {
Timer time = new Timer();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = format.parse("2014-08-19 21:56:03");
time.scheduleAtFixedRate(new MyTimerTask(), date, 1000);
}
}
有一定java基础的肯定能看出来,我就是在一个简单的java类里面就触发了这个计划任务!
那么我们怎么让我们的java web项目已启动的时候就去触发这个机会任务,服务器只要开启了,计划任务就存在,怎么去做呢,这里我介绍使用servlet来触发:
首先我们要做的就是把上面的Mytimer类改写成一个正规的servlet类,如下:
public class Mytimer extends HttpServlet {
public void init() {
Timer time = new Timer();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date;
try {
date = format.parse("2014-08-19 23:00:03");
time.scheduleAtFixedRate(new MyTimerTask(), 0, 1000);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
然后就需要配置我们项目的配置文件WEB.XML文件了,我们在这里面,让定时器在服务器开启了的时候就加载进来,详细的配置如下:
<servlet>
<servlet-name>Timer</servlet-name>
<servlet-class>action.TimerUtils.Mytimer</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
简单介绍一下这里面的load-on-startup的作用吧!也是我看到的网友总结的这个,我之前也不知道呢!
load-on-startup的取值一般都是正数或者0,我们通常取0,1,2,3,4,5,值越小越优先加载
好了,等这几天在项目里面具体实现定时更新静态html内容了,在看看还有什么需要补充的东西,在补充吧,很晚了!和自己说一声晚安,加油!