我有一个listener project,我想实现一个web版本。我需要它在部署后持续运行。换句话说,只要应用程序部署到Apache Tomcat 7.0.14.0上,应立即开始监听/连续运行,而不会影响其他Web应用程序。这可能吗?在部署中持续运行类
0
A
回答
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>
Download的例子
1
你忘了启动线程
@Override
public void contextInitialized(ServletContextEvent arg0) {
Thread th = new Thread();
....
th.start();
}
但随着ExecutorService的解决办法是安静的更好!
而且......如果需要,您应该自动启动您的应用程序。
<load-on-startup>100</load-on-startup>
+0
哦,当然,我错过了原来的帖子。 – 2012-07-23 12:42:45
相关问题
- 1. 在持续部署中管理密码
- 2. TeamCity的持续部署
- 3. 执行器线程在热部署后继续运行
- 4. 在Firefox中持续运行的JavaScript
- 5. 微软构建和持续部署 - 机
- 6. 错误设置Azure的持续部署
- 7. 自动部署与gitlab持续集成
- 8. Azure持续部署总是失败
- 9. C#/。NET - 持续集成和FTP部署
- 10. 使用MSDeploy持续部署IIS设置
- 11. 是否有持续部署框架?
- 12. Azure虚拟机上的持续部署
- 13. TeamCity在部署后运行
- 14. Cmd的持续运行但
- 15. 我应该使用gradle进行持续部署吗?
- 16. 作为Azure持续部署的一部分的数据库部署
- 17. 如何为Django项目设置持续集成和持续部署?
- 18. 为Microsoft应用程序设置持续集成和持续部署
- 19. 使用Microsoft Azure进行连续部署
- 20. 作为持续集成构建的一部分部署网站
- 21. T4运行模板部署
- 22. 多持续部署触发VSTS但不是在2017年TFS
- 23. 在Visual Studio Online上持续集成的Azure WebJobs部署
- 24. 持续集成 - 从TeamCity部署NuGet到Visual Studio在线源
- 25. Java Eclipse在命令行参数中持续运行时间
- 26. 持续集成和部署:机器人+测试飞行Api在iTunes连接
- 27. ClickOnce部署 - 在启动时运行
- 28. Trigoku Travis在Heroku部署后运行
- 29. 在capistrano部署后运行Raketask
- 30. 如何运行与部署在Heroku
你的意思是一个'ServletContextListener'? – 2012-07-23 07:55:28
是的,但它有可能让它在后台运行?如果你尝试运行index.jsp,它只会在'contextInitialized'进程完成后才在浏览器中打开(即使你在一个'new Thread()'运行进程。 – ThreaT 2012-07-23 08:13:16
并非如此 - 如果你运行在一个单独的线程中,contextInitialized方法将会返回,并且所有东西都会像平常一样继续 – Bozho 2012-07-23 08:23:52