- CarieVinne
-
二、如果是需要Tomcat启动就能执行,不需要main方法的定时器的话:
web.xml里面需要这么配置:
<listener>
<listener-class>
com.InitListener
</listener-class>
</listener>
第一个类:InitListener
package com.listener;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* 系统启动时的监听类 初始化系统数据
*
* @author jhoneder
*
*/
public class InitListener implements ServletContextListener {
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
// context销毁时,销毁初始化数据
}
public void contextInitialized(ServletContextEvent event) {
// TODO Auto-generated method stub
try {
goTimmer();
} catch (Exception e) {
System.out.println("失败:" + e.getMessage());
}
}
private void goTimer() {
Timer timmerTask = new Timer();
Calendar calEnviron = Calendar.getInstance();
// 每天的02:00.am开始执行
calEnviron.set(Calendar.HOUR_OF_DAY, 2);
calEnviron.set(Calendar.MINUTE, 00);
// date为制定时间
Date dateSetter = new Date();
dateSetter = calEnviron.getTime();
// nowDate为当前时间
Date nowDateSetter = new Date();
// 所得时间差为,距现在待触发时间的间隔
long intervalEnviron = dateSetter.getTime() - nowDateSetter.getTime();
if (intervalEnviron < 0) {
calEnviron.add(Calendar.DAY_OF_MONTH, 1);
dateSetter = calEnviron.getTime();
intervalEnviron = dateSetter.getTime() - nowDateSetter.getTime();
}
// 每24小时执行一次
timmerTask.schedule(new UseTimer(timmerTask), intervalEnviron, 1 * 1000 * 60 * 60 * 24);
}
}
第二个类:
package com.listener;
import java.util.Timer;
import java.util.TimerTask;
/**
* 被调用执行类
*
* @author Administrator
*
*/
public class UseTimer extends TimerTask {
Timer timer = new Timer();
public UseTimer(Timer timer) {
this.timer = timer;
}
/*
* 被调用具体的方法
*/
public void run() {
System.out.println("开始具体执行!");
}
}
不懂得话可以追问!
- tt白
-
可以通过以下方式实现,
public class TimerManager {
//时间间隔
private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
public TimerManager() {
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 timer = new Timer();
NFDFlightDataTimerTask task = new NFDFlightDataTimerTask();
//安排指定的任务在指定的时间开始进行重复的固定延迟执行。
timer.schedule(task,date,PERIOD_DAY);
}
// 增加或减少天数
public Date addDay(Date date, int num) {
Calendar startDT = Calendar.getInstance();
startDT.setTime(date);
startDT.add(Calendar.DAY_OF_MONTH, num);
return startDT.getTime();
}
}
public class NFDFlightDataTimerTask extends TimerTask {
private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class);
@Override
public void run() {
try {
//在这里写你要执行的内容
} catch (Exception e) {
log.info("-------------解析信息发生异常--------------");
}
}
}
public class NFDFlightDataTaskListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
new TimerManager();
}
public void contextDestroyed(ServletContextEvent event) {
}
}
然后要在web.xml里面配置监听器
<listener>
<listener-class>
com.listener.NFDFlightDataTaskListener
</listener-class>
</listener>
- 陶小凡
-
用一个死循环来代替。然后判断当前时间,如果当前时间为要执行的时间就执行那个方法。另外为了减少资源占用,如果时间固定的话 可以在执行完这个方法之后让线程休眠。
- 大鱼炖火锅
-
spring定时任务
- clc1
-
http://blog.csdn.net/ahxu/article/details/249610
主要参考方法就可以了