java定时任务每天执行TimerTask 使用方法
ReportTask:/**
* Copyright (c) 2010-2013 by科帮网
* All rights reserved.
*/
package com.Task;
import java.util.TimerTask;
import javax.servlet.ServletContext;
import org.springframework.web.context.ContextLoader;
import com.acts.resultProcessing.analysis.AnalysisManage;
/**
*@Function: 定时任务
*@Class Name: ReportTask
*@Author: 科帮网
*@Date: 2014-6-4
*@Modifications:
*@Modifier Name; Date; The Reason for Modifying
*
*/
public class ReportTask extends TimerTask {
/**
*@Function: 任务执行
*@Author: 科帮网
*@Date: 2014-6-4
*@Modifications:
*@Modifier Name; Date; The Reason for Modifying
*
*/
@Override
public void run() {
//任务执行方法
}
}
TaskTimerManage:
/**
* Copyright (c) 2010-2012 by科帮网
* All rights reserved.
*/
package com.Task;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
/**
* TODO
* @author 科帮网
* @date 2014-6-4
*/
public class TaskTimerManage {
// 时间间隔
private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
private Timer timer = null;
/**
*
*@Function: 启动定时器
*@Author:科帮网
*@Date: 2014-6-4
*@Modifications:
*@Modifier Name; Date; The Reason for Modifying
*
*/
public void start(){
Calendar calendar = Calendar.getInstance();
/*** 定制每天凌晨2:00执行方法 ***/
calendar.set(Calendar.HOUR_OF_DAY, 2);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date date = calendar.getTime(); // 第一次执行定时任务的时间
// 如果第一次执行定时任务的时间 小于 当前的时间
// 此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
if (date.before(new Date())) {
date = this.addDay(date, 1);
}
timer = new Timer(true);
ReportTask reportTask = new ReportTask();
timer.schedule(reportTask, date, PERIOD_DAY);
}
/**
*
*@Function: 停止定时器
*@Author:科帮网
*@Date: 2014-6-4
*@Modifications:
*@Modifier Name; Date; The Reason for Modifying
*
*/
public void stop(){
if(timer!=null){
timer.cancel();
}
}
/**
*
*@Function: 增加或减少天数
*@Author:科帮网
*@param date
*@param num
*@returnDate
*@Date: 2014-6-4
*@Modifications:
*@Modifier Name; Date; The Reason for Modifying
*
*/
public Date addDay(Date date, int num) {
Calendar startDT = Calendar.getInstance();
startDT.setTime(date);
startDT.add(Calendar.DAY_OF_MONTH, num);
return startDT.getTime();
}
}
在 TimerManager 这个类里面,大家一定要注意 时间点的问题。如果你设定在凌晨2点执行任务。但你是在2点以后
发布的程序或是重启过服务,那这样的情况下,任务会立即执行,而不是等到第二天的凌晨2点执行。为了,避免这种情况
发生,只能判断一下,如果发布或重启服务的时间晚于定时执行任务的时间,就在此基础上加一天。
StartUpListener:
/**
* Copyright (c) 2010-2013 by科帮网
* All rights reserved.
*/
package com.Task;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
*@Function: 监听
*@Class Name: StartUpListener
*@Author: 科帮网
*@Date: 2014-6-4
*@Modifications:
*@Modifier Name; Date; The Reason for Modifying
*
*/
public class StartUpListener implements ServletContextListener {
private TaskTimerManage taskTimerManage = null;
/**
*@Function: 销毁
*@param arg0
*@Author: 科帮网
*@Date: 2014-6-4
*@Modifications:
*@Modifier Name; Date; The Reason for Modifying
*
*/
@Override
public void contextDestroyed(ServletContextEvent event) {
if(taskTimerManage!=null){
taskTimerManage.stop();
}
}
/**
*@Function: 初始化
*@param arg0
*@Author: 科帮网
*@Date: 2014-6-4
*@Modifications:
*@Modifier Name; Date; The Reason for Modifying
*
*/
@Override
public void contextInitialized(ServletContextEvent event) {
taskTimerManage = new TaskTimerManage();
taskTimerManage.start();
}
}
web.xml配置:
<listener>
<listener-class>
com.Task.StartUpListener
</lstener-class>
</lstener>
页:
[1]