我有一个监听器项目,我想实现一个网络版本。我需要它在部署时连续运行。换句话说,一旦应用程序部署到Apache Tomcat 7.0.14.0上,它就应该立即开始连续监听/运行,而不会影响 Web 应用程序的其余部分。这可能吗?
问问题
772 次
2 回答
1
根据您的描述,Tomcat 似乎希望 ServletContext 侦听器完成,然后再进入下一个部署阶段。在这种情况下,您可以将希望在后台进行的工作放入 Runnable 类中。
RunClassOnDeployment.java
package web.deployment;
import javax.servlet.ServletContext;
public class RunClassOnDeployment implements Runnable {
ServletContext myServletContext; // in case you need the servelet context
RunClassOnDeployment(ServletContext sc) {
myServletContext = sc;
}
public void run() {
Thread th = new Thread();
try {
for (int i = 1; i <= 100; i++) {
System.out.println(i);
th.sleep(1000);
}
} catch (InterruptedException e) {
System.out.println("Thread interrupted! " + e);
}
}
}
并在您的侦听器中使用 ExecutorService 将其关闭:
MyListener.java
package web.deployment;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("ServletContextListener destroyed");
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.submit(new RunClassOnDeployment(arg0.getServletContext()));
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<listener>
<listener-class>web.deployment.MyListener</listener-class>
</listener>
</web-app>
下载示例
于 2012-07-23T10:56:59.360 回答
1
你忘了开始你的话题
@Override
public void contextInitialized(ServletContextEvent arg0) {
Thread th = new Thread();
....
th.start();
}
但是 ExecutorService 的解决方案更安静!
而且...如果需要,您应该自动启动您的应用程序。
<load-on-startup>100</load-on-startup>
于 2012-07-23T11:39:25.207 回答