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

Java Web应用程序中定期更新数据库的最佳方法,java,Java,我有一个在Glassfish服务器上运行的java web应用程序。我使用war文件在各种服务器中部署应用程序。现在,为了保持应用程序的数据库更新,我想定期运行一些类(从应用程序内部),而不需要任何用户交互(不应取决于应用程序是否正在运行/当前用户/会话)。我已经看到,使用一些Timer和TimerTask类,我可以定期运行任何作业。但是第一次如何初始化它呢 请思考如何完成此过程。创建一个servlet并在启动时加载它。我想您可以在那里初始化任务。使用作业调度程序。考虑石英并在程序启动时启动它。

我有一个在Glassfish服务器上运行的java web应用程序。我使用war文件在各种服务器中部署应用程序。现在,为了保持应用程序的数据库更新,我想定期运行一些类(从应用程序内部),而不需要任何用户交互(不应取决于应用程序是否正在运行/当前用户/会话)。我已经看到,使用一些TimerTimerTask类,我可以定期运行任何作业。但是第一次如何初始化它呢


请思考如何完成此过程。

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

使用作业调度程序。考虑石英并在程序启动时启动它。使用调度器的好处在于,您的程序更易于维护,您可以轻松创建其他新作业。Quartz是一个很好的解决方案,正如前面所建议的那样。但如果你需要更轻的重量,我会看看预定的执行人:

它不如Quartz灵活,但您不需要添加任何依赖项,它可能足以满足您的需要


关于创业;我通常使用Spring连接我的应用程序及其依赖项。因此,启动调度器并运行计划任务是一件轻而易举的事情。

答案会根据您使用的Java EE版本而变化。在JavaEE5和以前的版本中,您将在部署时使用ServletContextListener来运行使用。在JavaEE6+中,您可以使用@Schedule注释,它使用注释和cron类型语法在部署时安排任务

当然,如果您不需要自动的部署时间调度,那么您只需要创建一些web表单,在提交时调用EJB,而EJB又以编程方式调用计时器API


有关更多信息,请参见

ServletContextListener。