Web应用程序中的计划任务?

我正在为在线游戏构建统计应用程序,使用Java中的servlet API构建(将部署在Tomcat上)。 每次用户登录时,让游戏向stats服务器发送消息都很容易,因为处理请求是Servlets / Tomcat的用途。

我还需要定期在统计服务器上发起请求,例如从游戏服务器检索在线用户的数量或从我们的Facebook页面检索粉丝数量。

在应用程序的主servlet中启动一个线程并让它偶尔进行数据检索会很容易,但感觉有点奇怪,因为所有其他线程都是由Tomcat创建的。

  1. 这样做好吗?
  2. 如果没有,推荐的方法是什么?
  3. 将servlet用于这样的事情是否正确? 有什么选择?

请注意第一个答案:我不是在寻找解决时序或并发问题的方法,因为我可以轻松处理这两个问题。 我只需要知道如何在servlet容器中正确启动主动进程。

Quartz是您最好的选择,也是最具可配置性的。 它具有基于CRON的接口或更动态的方式来生成相对于特定事件的作业,如果您的用例需要它,Quartz可以做到这一点。 它能够将作业持久保存到数据库中,以便它们能够在重新启动后继续运行。

http://www.quartz-scheduler.org/

像这样在web.xml中进行配置以自动启动它:

 QuartzInitializer Quartz Initializer Servlet org.quartz.ee.servlet.QuartzInitializerServlet 1  shutdown-on-unload true   start-scheduler-on-load true   

你应该考虑:

  • 石英
  • “常规” TimerTask
  • 如果您在webapp上使用spring, 则会有专门的部分

不要费心重新发明轮子,Quartz和其他产品已经为您处理线程/超时/并发问题!