Java Web应用程序中定期更新数据库的最佳方法

3
我有一个Java Web应用程序,正在Glassfish服务器上运行。使用war文件,我可以将该应用程序部署在各种服务器上。现在,为了保持我的应用程序的数据库更新,我希望定期运行一些类(来自应用程序内部),而不需要任何用户交互(不应依赖于应用程序是否正在运行,当前用户/会话)。我发现使用一些 Timer TimerTask 类,我可以定期运行任何作业。但是如何首次初始化它呢?
请分享您的想法,如何完成此过程。
4个回答

3

使用作业调度器。考虑使用Quartz http://quartz-scheduler.org/,并在程序启动时启动它。使用调度器的好处是您的程序更易于维护,并且可以轻松创建其他新作业。


1
创建一个servlet并使其在启动时加载。在那里,您可以初始化您的任务,我想。

一个ServletContextListener会更好。 - Chase

1
Quartz是一个很好的解决方案,如之前所建议。但是,如果您需要更轻量级的东西,我建议看一下被预定执行程序。

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html

它比Quartz不够灵活,但您无需添加任何依赖项,也许对您的需求来说已经足够好了。
关于启动; 我通常使用Spring来连接我的应用程序及其依赖项。因此,启动调度程序和运行定期任务就变得非常简单。

1

答案取决于您使用的Java EE版本。在Java EE 5和以前的版本中,您将使用ServletContextListener在部署时运行代码(调用EJB)来使用Timer API。在Java EE 6+中,您可以使用@Schedule注释,该注释使用注释和类似cron的语法,在部署时安排任务。

当然,如果您不需要自动部署时间调度,则只需创建一些Web表单,提交后调用程序化地调用Timer API的EJB。

更多信息请参见Java EE教程


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