我试图在我的 web 应用程序启动时调用一个方法。目的是启动一个计时器,该计时器以定义的时间间隔执行某些工作。当我的 jboss 7.1 Web 应用程序启动时,我如何调用函数 helloworld?
4 回答
如果您想在您的 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>
希望这可以帮助。
除了 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 本身有一些为此目的的工具:调度和管理任务。没用过所以不推荐。
查看Quartz 调度程序。您可以使用CronTrigger以定义的时间间隔触发。例如,每 5 分钟将如下所示:
"0 0/5 * * * ?"
这个想法是实现作为Job
要运行的任务的接口,使用SchedulerFactory
/安排它Scheduler
,构建Job
并CronTrigger
启动它。
这里有一个非常清楚的例子。
使用ServletContextListener
在您的web.xml
. 在方法中编写启动计时器的代码contextInitialized
。