`

Java Web定时任务

    博客分类:
  • java
阅读更多
在工程的WEB-INF\web.xml配置文件中加入如下三行,所计划的任务就会在Web容器(或服务器)启动时自动开始执行了:
<listener>
<listener-class>com.xxh.autoTask.ProjectServletContextListner</listener-class>
</listener>

ProjectServletContextListner.java
package com.xxh.autoTask;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class ProjectServletContextListner implements ServletContextListener {

//定时器
private static java.util.Timer timer = null;


//此方法仅在关闭Web容器(或服务器)时被调用一次
public void contextDestroyed(ServletContextEvent event) {
// TODO Auto-generated method stub
timer.cancel();
event.getServletContext().log("定时器已销毁,任务执行结束");
}

//此方法仅在起动Web容器(或服务器)时被调用一次
public void contextInitialized(ServletContextEvent event) {
// TODO Auto-generated method stub
timer = new java.util.Timer(true);
javax.servlet.ServletContext ctx = event.getServletContext();
ctx.log("定时器已启动,任务开始执行");
/*
//如果是用web.xml文件配置参数,则用下面的方式读取参数设置值
long period = Long.valueOf((String)ctx.getInitParameter("period")).longValue();
*/

timer.schedule(new NewTask(), // 所需要执行的任务
0, // 延迟时间(0 --- 表示起动Web容器(或服务器)就立即执行此任务)
30*1000 // 任务的执行间隔时间[单位:毫秒] (此处的间隔时间是30秒)
);
}

}


CustomTask.java
package com.xxh.autoTask;

public interface CustomTask {

/**
* 用于实现自定义的任务
*/
public void execute();

}

CustomTask.java
package com.xxh.autoTask;

public class MyTask implements CustomTask {

public void execute() {
// TODO Auto-generated method stub
System.out.println("在此方法中实现任务的主体");
}

}


NewTask.java
package com.xxh.autoTask;

import java.util.TimerTask;

public class NewTask extends TimerTask {

private static boolean isRunning = false; //运行标志(表示是否正在运行计划的任务)
private static int t = 3;
private CustomTask ct = TaskFactory.getTask();

@Override
public void run() {
// TODO Auto-generated method stub
if(!isRunning){ //当未执行此任务时则开始执行
if(ct != null){
isRunning = true; //将任务执行标志设置为正在执行
ct.execute(); //执行任务
isRunning = false; //将任务执行标志设置为执行完毕
}else{
if(t == 0) return;
t--;
System.out.println();
System.out.println("[Error] [com.xxh.autoTask.NewTask] The task is null.");
System.out.println("[Error] [com.xxh.autoTask.NewTask] The task is null.");
System.out.println("[Error] [com.xxh.autoTask.NewTask] The task is null.");
}
}else{
System.out.println("The task is running.");
}

}

}


TaskFactory.java
package com.xxh.autoTask;

public class TaskFactory {

/**
* 功能:返回实现了CustomTask接口的类的实例对象
*
*
* 例: 如果实现了CustomTask接口的类名是MyTask,
* return new MyTask();
* 如上这样就可以了.
*/
public static CustomTask getTask(){
return new MyTask();
}

}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics