1. 监听器
import java.util.Calendar;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import com.suoya.upload.task.MyTask;
public class TaskListener implements ServletContextListener {
/**
* 每天的毫秒数 ,时间间隔一天
*/
public static final long PERIOD_DAY=24 * 60 * 60 * 1000;
/**
* 无延迟
*/
public static final long NO_DELAY = 0;
/**
* 定时器
*/
private Timer timer;
/**
* 在Web应用启动时初始化任务
*/
public void contextInitialized(ServletContextEvent event) {
//定义定时器
timer = new Timer("执行定时任务",true);
Calendar cal = Calendar.getInstance();
//每天定点执行
cal.set(Calendar.HOUR_OF_DAY,12);
cal.set(Calendar.MINUTE,0);
cal.set(Calendar.SECOND,0);
timer.schedule(new MyTask(),cal.getTime(), PERIOD_DAY);
}
/**
* 在Web应用结束时停止任务
*/
public void contextDestroyed(ServletContextEvent event) {
timer.cancel(); // 定时器销毁
}
}
2. 自定义定时任务
import java.util.TimerTask;
/**
* 自定义定时任务,web容器启动的时候启动
* @author sunt
* @dade 2017年4月27日下午3:45:07
* @version v1.0
*/
public class MyTask extends TimerTask {
private static boolean isRunning = false;
@Override
public void run() {
if (!isRunning) {
isRunning = true;
System.out.println("开始执行任务..."); // 开始任务
System.out.println("====================>开始定时调用业务逻辑功能...");
System.out.println("执行任务完成..."); // 任务完成
isRunning = false;
} else {
System.out.println("上一次任务执行还未结束..."); //上一次任务执行还未结束
}
}
}
3. web容器配置监听器
<!-- 监听器的配置 -->
<listener>
<listener-class>com.suoya.upload.linster.TaskListener</listener-class>
</listener>
4. 执行定时任务
MyTask 中run()方法调用定时逻辑的方法
//代表每天十二点执行一次
cal.set(Calendar.HOUR_OF_DAY,12);
cal.set(Calendar.MINUTE,0);
cal.set(Calendar.SECOND,0);
//设置其他执行时间修改对应的时分秒即可