我正在尝试在我的webapplication启动时调用方法。目的是启动定时器,该定时器以定义的间隔执行某些操作。 当我的jboss 7.1 Web应用程序启动时,如何调用函数helloworld?
答案 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
方法启动计时器的代码。