web.xml
里面设置定时器:
<listener>
<listener-class>com.action.NFDFlightDataTaskListener</listener-class>
</listener>
执行任务实现
package com.action;
import java.util.TimerTask;
import com.sm.ClosingOfaAcountSIM; //用来发送短信的类实现
/** * @author sky * */
public class NFDFlightDataTimerTask2 extends TimerTask {
// private static Logger log =
// Logger.getLogger(NFDFlightDataTimerTask.class);
@Override
public void run() {
try {
// 在这里写你要执行的内容
ClosingOfaAcountSIM sendcloseaccmsg = new ClosingOfaAcountSIM();
System.out.println("销户通知短信");
sendcloseaccmsg.SendClOAccSIM();
} catch (Exception e) {
// log.info("-------------解析信息发生异常--------------");
}
}
}
定时设置:
package com.action;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class NFDFlightDataTaskListener implements ServletContextListener {
private Timer timer = null;
private Timer timer2 = null;
public void contextInitialized(ServletContextEvent event) {
timer = new Timer(true); //第一个定时器
new TimerManager(timer);
timer2 = new Timer(true); //第二个定时器
new TimerManager2(timer2);
}
public void contextDestroyed(ServletContextEvent event) {
System.out.println("关闭定时线程");
timer.cancel();
timer2.cancel();
}
}
实现定时timer2
package com.action;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
public class TimerManager2 {
// 时间间隔
private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
public TimerManager2(Timer timer) {
Calendar calendar = Calendar.getInstance();
/** * 定制每日12:30执行方法 ** */
calendar.set(Calendar.HOUR_OF_DAY, 14);
calendar.set(Calendar.MINUTE, 02);
calendar.set(Calendar.SECOND, 0);
Date date = calendar.getTime(); // 第一次执行定时任务的时间
// 如果第一次执行定时任务的时间 小于 当前的时间
// 此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
if (date.before(new Date())) {
date = this.addDay(date, 1);
}
//Timer timer = new Timer();
NFDFlightDataTimerTask2 task = new NFDFlightDataTimerTask2();
// 安排指定的任务在指定的时间开始进行重复的固定延迟执行。
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();
}
}
现在的问题是:我设置了两个任务,在我的windows里面运行,两个定时器均会正常工作,但是我部署到liunx的服务器的tomcat里面以后,却只能运行第一个timer,第二个不会运行
求助
6 个解决方案
#1
j.u.Timer/j.u.TimerTask 就是一个渣。应该废弃不用。
#2
谢谢指导
我的问题是:
public void contextInitialized(ServletContextEvent event) {
timer = new Timer(true); //第一个定时器
new TimerManager(timer);
timer2 = new Timer(true); //第二个定时器
new TimerManager2(timer2);
}
这个两个定时器任务,在我的windowsXP下的tomcat6下面是正常工作的,但是在linux的tomcat下面只能运行timer(第一个),能解决吗?
然后你说java.util.TimerTask不好,用什么作为定时呢?
#3
Quartz
#4
谢谢,有没有好用的例子可以参考的?
#5
是我分发的时候的问题,解决了,谢谢
#6
可以告诉我,你怎么解决的吗?Thank you.
#1
j.u.Timer/j.u.TimerTask 就是一个渣。应该废弃不用。
#2
谢谢指导
我的问题是:
public void contextInitialized(ServletContextEvent event) {
timer = new Timer(true); //第一个定时器
new TimerManager(timer);
timer2 = new Timer(true); //第二个定时器
new TimerManager2(timer2);
}
这个两个定时器任务,在我的windowsXP下的tomcat6下面是正常工作的,但是在linux的tomcat下面只能运行timer(第一个),能解决吗?
然后你说java.util.TimerTask不好,用什么作为定时呢?
#3
Quartz
#4
谢谢,有没有好用的例子可以参考的?
#5
是我分发的时候的问题,解决了,谢谢
#6
可以告诉我,你怎么解决的吗?Thank you.