TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
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
*@return Date
*@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>
复制代码
java定时任务每天执行TimerTask 使用方法.zip
(9.32 KB, 下载次数: 0, 售价: 30 IT币)
|
|