在JSP应用中怎么间隔时间执行后台的方法

在JSP应用中怎么间隔时间执行后台的方法

问题描述:

网上有用timer,timertask,可我只想每天只执行一遍,就是说:每天都执行但只执行一次,但在timwer指定任务后无法控制执行的次数啊,有没好的逻辑一些方法?
[b]问题补充:[/b]
先谢谢。
我要定时生成一个邮件信息保存到表里边(orcal间隔的检查表中是否有邮件,有则发送),这邮件的类型有周报,月报,年报等。
后台间隔执行任务。这个任务的目的就是生成邮件信息,现在有calendar.get(calendat.DAY_OF_WEEK)=2判断这天是否为周一(其他类似).
现在问题来了,如果是周报我必须保证在周1上班前把邮件生成好并放到表里边,而且要使得不能重复生成这周的邮件,如果没正常生成邮件出现异常或者重启服务器了,要记录该邮件信息,待启动服务器后再生成之前未成功生成的邮件。
timer设置的没间隔半小时执行一遍,这就很有可能在周一这天重复生成相同的邮件,我要他在周1上班前只生成一次邮件,第一次不成功的试生成5次,5次都不成功的就罢了。
执行任务时又怎么区别是已到了下周1还是这周一已生成过邮件了 这两种情况?

好费劲啊!大哥们

那建议你用 任务调度框架Quartz,可定制性强多了

任务调度框架Quartz文档
http://blog.csdn.net/alex197963/archive/2009/08/06/4417995.aspx

间隔时间24小时不就是一天一次么?

java.util.Timer 是 Sun JDK 提供的一种计时器,用于使后台线程按计划执行指定任务,这些任务可以被执行一次,也可以被定期执行。每个 Timer 对象对应一个后台线程,顺序地执行所有计时器任务。如果完成某个计时器任务的时间太长,那么它会“独占”计时器的任务执行线程,从而可能延迟后续任务的执行。对 Timer 对象最后的引用完成并且所有未处理的任务都已执行完成后,计时器的任务执行线程会正常终止(并且成为垃圾回收的对象)。以下为一个使用 java.util.Timer 的例子:

import java.util.Timer;
import java.util.TimerTask;
public class TimerTest {
Timer timer;
public TimerTest(int seconds) {
timer = new Timer();
timer.schedule(new TimerTestTask(), seconds*1000);
}
class TimerTestTask extends TimerTask {
public void run() {
System.out.println("In TimerTestTask, execute run method.");
timer.cancel();
}
}
public static void main(String args[]) {
System.out.println("Prepare to schedule task.");
new TimerTest(2);
System.out.println("Task scheduled.");
}
}

[code="java"]import java.util.Timer;
import java.util.TimerTask;
public class TimerTest {
Timer timer;
public TimerTest(int seconds) {
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTestTask(), 0,seconds*1000);
}
class TimerTestTask extends TimerTask {
public void run() {
System.out.println("In TimerTestTask, execute run method.");
timer.cancel();
}
}
public static void main(String args[]) {
System.out.println("Prepare to schedule task.");
new TimerTest(24*60*60);
System.out.println("Task scheduled.");
}
} [/code]

上面的代码做简单修改就能满足你的要求,TimerTestTask 设置的是每天执行一次。