Java - 定时执行每日任务

7
我正在寻找一种有效的方法,在每天下午3点执行一个方法,无论应用程序最初何时运行或运行了多长时间。

这必须完全从应用程序中完成,没有操作系统干预(例如Windows任务计划程序)。

我一直在尝试使用java.util.Timer以不同的配置,但我没有成功。

任何帮助将不胜感激。

谢谢。


1
你遇到了什么困难?定期唤醒计时器并检查当天的时间,查看应用程序的“cron”表以确定是否需要执行任何操作应该很简单,不是吗? - jottos
6个回答

16

你应该看一下Quartz,它是一个基于Java的作业调度系统。


一定要使用Quartz。它是我最喜欢的调度程序。运行非常稳定。 - Maksim
我一直在想,首先你需要一个正在运行的应用程序才能运行Quartz,对吗?如果没有启动任何应用程序,是否可以运行它?Java应用程序如何在后台运行?(也许在TrayIcon中运行或类似的东西?) - OscarRyz
是的,必须有一个包括Quartz的Java应用程序正在运行。请参考https://dev59.com/mXRC5IYBdhLWcg3wVvnL 以在后台运行Java应用程序。 - Mark

2
您可能想使用类似于石英引擎(quartz engine)的东西,它可以执行错过的任务(比如在崩溃期间),并且它可以省去尝试管理线程的工作。
例如,如果您使用线程并将其挂起,并在86400秒(一天)后唤醒它,那么在夏令时更改日(day = 82800秒或day = 90000秒)上,您会晚一个小时或早一个小时,所以请小心选择任何解决方案。

2

一个内置的JDK方法是按照其他人建议的计算:

  • currentTime - desiredTime

然后,您可以使用类似计划执行器的东西提交任务,并以特定延迟运行它们。这比像Quartz这样的框架选项要简单得多,但不需要外部依赖。

此外,您应该始终列出您正在使用的JDK版本,以便人们可以为您的JDK版本提供解决方案。


1
您可以启动一个线程来计算到下一个下午3点的时间差并休眠。当它醒来时,执行该方法并重新计算休眠时间。这是您想要的吗?

1

1

Jcrontab

Jcrontab是一个用Java编写的调度程序。该项目的目标是为Java项目提供完全功能的计划表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接