每天午夜重启节目

时间:2017-05-04 07:14:48

标签: java

可能相当简单的问题,我无法找到怎么做。我想要做的只是每天午夜重启我的Java应用程序。所以我想象每分钟检查当前数据的内容,如果新日期大于初始日期,则执行以下操作:

try {
    Runtime.getRuntime().exec("java -jar fxmonitor.jar");
} catch (IOException e) {
    e.printStackTrace();
}
System.exit(0);

任何提示都非常赞赏。

4 个答案:

答案 0 :(得分:1)

您可以使用系统支持的功能,例如Task schedulercrontab

答案 1 :(得分:1)

我想我的问题有一个样本

class SayHello extends TimerTask {

    public void run() {
      try {
           Runtime.getRuntime().exec("java -jar fxmonitor.jar");
      } catch (IOException e) {
           e.printStackTrace();
      }
    }

}

从您的主要方法调用相同的内容:

public class sample {

    public static void main(String[] args) {
        Timer timer = new Timer();
        timer.schedule(new SayHello(), 2000, 2000); // replace 2000 with 24hr converted to millisec
    }

}

答案 2 :(得分:1)

MAJOR EDIT:首先你需要创建一个计时器。我建议创建一个公共变量Timer midnightTimer = new Timer()。然后创建一个扩展TimerTask的新类:

private class PeriodicTask extends TimerTask {
    @Override
    public void run() {
        // ... YOUR TASK (code later in this post)
    }
}    

然后同时程序运行你可能想要在Date上启动以下代码应该在当天的任何一天的午夜:

// today    
Calendar date = new GregorianCalendar();
// reset hour, minutes, seconds and millis
date.set(Calendar.HOUR_OF_DAY, 0);
date.set(Calendar.MINUTE, 0);
date.set(Calendar.SECOND, 0);
date.set(Calendar.MILLISECOND, 0);

// next day
date.add(Calendar.DAY_OF_MONTH, 1);
Date midnightTonight = date.getTime();

这里可以看到一个例子java timer task schedule

您可以使用命令行启动Java程序。这可以通过Runtime.getRuntime().exec()

完成

(有关详情,请查看Run .exe file from Java from file locationhow to execute command line .exe file in java

这方面的一个例子是:

try {
    Runtime.getRuntime().exec("cmd.exe /c start " + PATHWAYTOYOURPROGRAM); //put here the absolute or relative path to launch the exe
} catch (IOException e) {
    // ... could not launch
}

重新启动程序后,您可以删除原始程序:

System.exit(0);
编辑:AlexlH有一个好点。如果您确实有错误并且确实崩溃,那么它将不再在午夜运行。您还可以研究从创建计划任务您的java程序(如果尚不存在),然后在午夜再次运行java程序。但这样做会更难。这是一个可能有用的链接:

答案 3 :(得分:0)

使用Quartz调度程序。来自他们的网站:

  

什么是Quartz作业调度库?

     

Quartz是一个功能丰富的开源作业调度库,几乎可以集成在任何Java应用程序中 - 从最小的独立应用程序到最大的电子商务系统。 Quartz可用于创建简单或复杂的计划,以执行数十,数百甚至数万个作业;将任务定义为标准Java组件的作业,这些组件可以执行几乎任何可以编程的程序。 Quartz Scheduler包含许多企业级功能,例如支持JTA事务和集群。

http://www.quartz-scheduler.org/