服务器启动时调用方法

时间:2013-03-24 00:56:22

标签: java jboss ejb-3.0

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

4 个答案:

答案 0 :(得分:6)

如果您想在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-class>
     com.test.MyServletContextListener
  </listener-class>
</listener>

希望这有帮助。

答案 1 :(得分: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可以使用您想要的任何方式启动任务,例如参见link

但你不应该使用那种方法,imho。

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

Jboss本身有一些工具用于此目的:安排和管理任务。从未使用过,所以不能推荐。

答案 2 :(得分:2)

结帐Quartz Scheduler。您可以使用CronTrigger以定义的间隔触发。例如,每5分钟看起来像这样:

"0 0/5 * * * ?"

我们的想法是实现Job接口,该接口是要运行的任务,使用SchedulerFactory / Scheduler进行计划,构建Job和{{1}并启动它。

有一个非常明确的例子here

答案 3 :(得分:1)

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