【发布时间】:2012-12-01 02:32:00
【问题描述】:
我想启动一个服务,它与服务器一起启动,直到服务器被杀死才结束。 所以首先我使用了 ServletContextListner 类,我在其中实现了我的逻辑部分以使用
运行该方法while(true){
try{ // do the jobs }
catch(Exception e){}
}
但后来我觉得在 Listener 课上执行这项工作并不好。 然后我转移到一个 ServiceManager 类并做同样的工作,但让我在使用 Spring 注入属性方面具有优势,这在 Listener 类中是不可能的。
但是关于如何更好/从哪里调用这个类并调用无限运行的 startService 方法的基本问题。
public void contextInitialized(ServletContextEvent event) {
logger.info(" *** START MyListener ****");
context = event.getServletContext();
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("spring/applicationContext.xml");
MyServiceManager serviceManager = (MyServiceManager) ctx.getBean("myServiceManager");
serviceManager.startService();
logger.info(" *** END MyListener ****");
}
或任何想法如何调用/实现此类服务以在没有任何抽象的情况下永远在服务器中运行 [在任何情况下,除非服务器停止,否则不应将其终止]
【问题讨论】:
-
有什么问题?使用 ServletListener 的 contextInitialized 启动和 contextDestroyed 停止服务应该可以解决问题。 “没有任何抽象”是什么意思?
-
怎么样 1. 创建一个 Servlet 并将您的服务代码放入 init 方法 2. 在 web.xml 中将其配置为启动 servlet
-
我认为问题是,服务器没有完成启动,直到控件脱离 contextInitialized 方法。因为,一切都运行良好,并且 startService 方法按预期永远运行。但是Tomcat在服务器启动时间结束后抛出错误。
标签: java design-patterns servlet-listeners