每天在设定的时间运行Java方法

Aus*_*ore 14 java schedule timer

我对Java比较陌生,我已经开始研究一个项目了.但是,我遇到了一个障碍.我需要一种方法在一天中的某些时间运行.我已经做了很多搜索,但我找不到任何看起来像它会做的伎俩.我遇到了Timer类,但它似乎以一定的间隔运行.Scheduler类似乎有同样的问题.我也遇到了Quartz,但我认为我需要更轻量级的东西,我只能看到如何间歇地做事.

也许,仅仅因为我是新人,我错过了一些可以帮助我完成这些课程的东西,但我真的很困难,可以使用一些帮助.

如果有人能指出我会在一天中的某个特定时间运行某个课程(每天都能获得奖励积分),并告诉我如何正确使用该课程,这将是非常棒的!

TL; DR:需要一个在一天中的某个时间做某事的课程,而不是一个时间间隔,因为该课程可能会在一天中多次重启.

dov*_*mir 29

尝试TimerTask类

了解更多信息,请访问 http://oreilly.com/java/archive/quartz.html

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class ReportGenerator extends TimerTask {

  public void run() {
    System.out.println("Generating report");
    //TODO generate report
  }

}

class MainApplication {

  public static void main(String[] args) {
    Timer timer = new Timer();
    Calendar date = Calendar.getInstance();
    date.set(
      Calendar.DAY_OF_WEEK,
      Calendar.SUNDAY
    );
    date.set(Calendar.HOUR, 0);
    date.set(Calendar.MINUTE, 0);
    date.set(Calendar.SECOND, 0);
    date.set(Calendar.MILLISECOND, 0);
    // Schedule to run every Sunday in midnight
    timer.schedule(
      new ReportGenerator(),
      date.getTime(),
      1000 * 60 * 60 * 24 * 7
    );
  }//Main method ends
}//MainApplication ends
Run Code Online (Sandbox Code Playgroud)

  • +1:我也爱石英.但是使用它与使用cron启动任务使得你的责任是应用程序永远不会崩溃,如果它仍然崩溃则会自动重启等等. (3认同)
  • 请注意,在夏令时更改后,这会被破坏!然后计时器将延迟或快速运行一小时,这里是凌晨1点或晚上11点(取决于它是在夏季开始还是过渡到冬季时,或相反). (2认同)

pau*_*sm4 5

我强烈建议,如果可能的话,最好的方法是使用操作系统的调度程序调用脚本或 Java 应用程序:例如,*nix 中的“cron”或 Windows 中的“任务调度程序”。