Cron Job 每天午夜运行



我正在使用计时器在Tomcat服务器中运行Cron Job,它在启动时运行并等待我分配的任何分钟数。现在,我将其分配给每 24 小时运行一次。

Web-XML 配置:

 <env-entry>
    <description>Minutes to Parse - 1440 minutes = 1 day</description>
    <env-entry-name>Minutes</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>1440</env-entry-value>
  </env-entry>

Cron 作业配置:

private void startScheduler() {
        try {
            timer.schedule(new TimerTask() {
                public void run() {
                    scheduleParse();
                    //timer.cancel();
                }
                private void scheduleParse() {
                    notificaciones();
                    System.out.println("Lo esta haciendo");
                }
            }, 0, this.minutes * 60 * 1000);
        }
        catch (Exception e) {
        }
    }

但是我需要我的函数每天在午夜运行,顺便说一下,它每 24 小时运行一次,以部署时间为参考。例如,如果我们在今天上午 10 点部署我们的 Web 应用程序,它将在每天上午 10 点运行。

我找到了一个解决方案,但我想知道是否有更好的解决方案。时间间隔为每 60 分钟一次...如果实际时间是上午 12 点,则将进行该过程。否则,将无能为力。

有没有更好的解决方案?

我想我会很想使用您的服务器环境的调度软件来触发作业,而不是尝试自己处理调度。如果计划程序线程因任何原因死亡,则永远不会在不延迟应用服务器的情况下再次运行作业。

在 Unix 上,您可以使用 cron tabe 来触发作业。Unix和Windows上都存在一系列更复杂的工具,但即使是cron也应该给你你想要的那种控制。

你应该使用 Timer.scheduleAtFixedRate() 而不是 Timer.schedule()。

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Timer.html#scheduleAtFixedRate%28java.util.TimerTask,%20java.util.Date,%20long%29

你可以试试石英调度器。这里有很好的例子。

最新更新