【发布时间】:2013-03-13 16:51:16
【问题描述】:
我试图在我的 web 应用程序启动时调用一个方法。目的是启动一个计时器,该计时器以定义的时间间隔执行一些工作。 我的 jboss 7.1 Web 应用程序启动时如何调用函数 helloworld?
【问题讨论】:
我试图在我的 web 应用程序启动时调用一个方法。目的是启动一个计时器,该计时器以定义的时间间隔执行一些工作。 我的 jboss 7.1 Web 应用程序启动时如何调用函数 helloworld?
【问题讨论】:
如果您想在您的网络应用程序为您的任何客户端提供服务之前运行一些代码,您需要一个 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>
希望这会有所帮助。
【讨论】:
除 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。
但是您不应该使用这种方法,恕我直言。
使用经过验证的框架/库,例如 quartz 或类似工具。在 Web 服务器中运行和同步任务存在很多问题/问题,最好使用一些经过验证的工具,而不是重复这些工具已经遇到和解决的错误。可能需要一点时间才能掌握,但会避免很多麻烦。
Jboss 本身有一些用于此目的的工具:调度和管理任务。没用过,不推荐。
【讨论】:
查看Quartz Scheduler。您可以使用CronTrigger 以定义的时间间隔触发。例如,每 5 分钟如下所示:
"0 0/5 * * * ?"
这个想法是实现Job接口,这是要运行的任务,使用SchedulerFactory/Scheduler调度它,构建Job和CronTrigger并启动它。
有一个很清楚的例子here。
【讨论】:
使用在您的web.xml 中配置的ServletContextListener。在contextInitialized 方法中编写启动计时器的代码。
【讨论】: