9

我试图在我的 web 应用程序启动时调用一个方法。目的是启动一个计时器,该计时器以定义的时间间隔执行某些工作。当我的 jboss 7.1 Web 应用程序启动时,我如何调用函数 helloworld?

4

4 回答 4

7

如果您想在您的 Web 应用程序为您的任何客户端提供服务之前运行一些代码,您需要一个 ServletContextListener。

创建你的监听器类

import javax.servlet.*;

public class MyServletContextListener implements ServletContextListener {

 public void contextInitialized(ServletContextEvent e) {
   //Call your function from the event object here
 }

 public void contextDestroyed(ServletContextEvent e) {

 }
}

把类放在 WEB-INF/classes

在 web.xml 文件中放置一个 < listener > 元素。

<listener>
  <listener-class>
     com.test.MyServletContextListener
  </listener-class>
</listener>

希望这可以帮助。

于 2013-03-24T01:25:43.273 回答
5

除了 ContextListeners,您还可以在启动时加载 web.xml 中的 servlet:

<servlet>
    <servlet-name>mytask</servlet-name>
    <servlet-class>servlets.MyTaskServlet</servlet-class>
    ...
    <load-on-startup>1</load-on-startup>
</servlet>

此 servlet 可以使用您想要的任何方式启动您的任务,例如,请参见此链接

但是你不应该使用这种方法,恕我直言。

使用经过验证的框架/lib,例如quartz或类似工具。在 Web 服务器中运行和同步任务存在很多问题/问题,最好使用一些经过验证的工具,而不是重复这些工具已经遇到和解决的错误。可能需要一点时间才能掌握,但会避免很多头痛。

Jboss 本身有一些为此目的的工具:调度和管理任务。没用过所以不推荐。

于 2013-03-24T01:26:03.347 回答
2

查看Quartz 调度程序。您可以使用CronTrigger以定义的时间间隔触发。例如,每 5 分钟将如下所示:

"0 0/5 * * * ?"

这个想法是实现作为Job要运行的任务的接口,使用SchedulerFactory/安排它Scheduler,构建JobCronTrigger启动它。

这里有一个非常清楚的例子。

于 2013-03-24T01:07:28.140 回答
1

使用ServletContextListener在您的web.xml. 在方法中编写启动计时器的代码contextInitialized

于 2013-03-24T01:06:57.517 回答