关于时间:每年在Java Web应用程序中执行任务

Execute a task every year in a Java web application

每年如何在Web应用程序中自动执行任务? Timer类对此有帮助吗?我也听说过石英吗?我在他们的页面上注册,但似乎不是免费的。谢谢您的帮助。


Quartz绝对是一个不错的选择,它是免费的开源软件,并使用Apache 2.0许可证(您无需注册即可下载)。如果您在* nix环境中,也可以简单地使用cron。

您也可以使用java.util.Timer,但是只有在您的用例极其琐碎并且您确保在启动Web应用程序时基于某种类型的持久层正确地重新启动Timer时,我才这样做。铅>


请考虑与业务利益相关者核实,是否仅应将每年仅运行一次的工作真正完全自动化。根据我的经验,很可能时间表会有细微的变化(例如,今年应该在一周的哪一天运行?)或经过很长时间后才可以更改工作的步骤。

此外,将来还会有其他计划的作业添加到系统中吗?如果不是,那么每年只有一项工作,是否值得在系统中增加自动执行的开销(实现,测试,监视等)?很少运行此操作的人很容易被遗忘,并且当它损坏时没人会注意到。

考虑以下替代方法:在应用中的某个位置添加一个按钮,以手动启动该工作(可能在管理页面上)。如果您的应用程序具有仪表板或登录页面,请添加一些仅对某些用户可见的信息,例如管理员-例如:" X作业应该在2011年11月23日上次运行,请启动下一次运行2012年11月30日之前"。


我建议您使用cron之类的东西。您的需求与UNIX cron守护程序的活动非常相似。有一个Java库提供了称为cron4j(http://www.sauronsoftware.it/projects/cron4j/)的相同功能。

下面是一些可以使用的调度程序。

  • cron4j
  • 石英
  • jcrontab
  • Essiembre J2EE调度程序
  • JDRing