是否有任何方法或API可以使用,以便無論何時我部署新的WAR文件,應執行一部分代碼或者在Tomcat啓動時,相應的servlet都應該連續啓動或運行一些代碼。我們第一次部署WAR文件時可以運行一些代碼嗎?
6
A
回答
6
您可以在web.xml中包含「ContextListener」。當Webb應用程序WAR即將部署/啓動時,將創建此類的一個實例。
此代碼可以啓動一個線程,該線程將繼續運行直到部署應用程序。
9
回想起一個老問題,因爲唯一的答案不顯示任何實例。
爲了運行每當一個Web應用程序WAR部署/取消部署或Tomcat啓動時的代碼定製片/停止,您需要:
- 落實
ServletContextListener
監聽器和它的方法contextInitialized()
和contextDestroyed()
。 - 讓Tomcat知道你的實現。根據documentation,您可以將實現類添加到部署描述符中,使用
WebListener
對其進行註釋,或者通過ServletContext
上定義的addListener()
方法之一對其進行註冊。
這裏是(基於this post)的示例:
package com.example;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyServletContextListener implements ServletContextListener {
/** The servlet context with which we are associated. */
private ServletContext context = null;
@Override
public void contextDestroyed(ServletContextEvent event) {
log("Context destroyed");
this.context = null;
}
@Override
public void contextInitialized(ServletContextEvent event) {
this.context = event.getServletContext();
log("Context initialized");
}
private void log(String message) {
if (context != null) {
context.log("MyServletContextListener: " + message);
} else {
System.out.println("MyServletContextListener: " + message);
}
}
}
並添加以下到web.xml
(或備選地,可使用WebListener
註解或addListener()
法):
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
...
<listener>
<listener-class>com.example.MyServletContextListener</listener-class>
</listener>
</web-app>
0
我找到一種方法來僅在應用程序(* .war)部署時運行一些代碼: 它至少適用於使用java servlet的澤西島servlet使用javax.ws.rs.core.Application。
ApplicationConfig.java文件中的應用程序(請參見下文)包含一個方法public getClasses,它在應用程序部署時調用。 因此,在getClasses中添加代碼會導致它在應用程序部署時執行。我注意到唯一的洞穴是奇怪的是這個函數被調用兩次,不知道爲什麼,所以我在ApplicationConfig類中添加了一個全局變量來知道我的代碼是否已經運行。
這裏是我的解決方案:
package eu.oca;
import java.util.Set;
import javax.ws.rs.core.Application;
/**
*
* @author mattei
*/
@javax.ws.rs.ApplicationPath("jersey")
public class ApplicationConfig extends Application {
private boolean alreadyRun = false;
@Override
public Set<Class<?>> getClasses() {
System.out.println("Sidonie : ApplicationConfig : getClasses : alreadyRun = " + String.valueOf(alreadyRun));
alreadyRun = true;
Set<Class<?>> resources = new java.util.HashSet<>();
addRestResourceClasses(resources);
return resources;
}
/**
* Do not modify addRestResourceClasses() method.
* It is automatically populated with
* all resources defined in the project.
* If required, comment out calling this method in getClasses().
*/
private void addRestResourceClasses(Set<Class<?>> resources) {
resources.add(eu.oca.ResultatGeneralAF.class);
resources.add(eu.oca.ResultatGeneralF.class);
resources.add(eu.oca.ResultatMesuresAF.class);
resources.add(eu.oca.ResultatMesuresF.class);
resources.add(eu.oca.SidonieAccueilD.class);
resources.add(eu.oca.SidonieWelcomeR.class);
}
}
相關問題
- 1. 我們可以在簡單的網站cPanel中部署一個.war文件嗎?
- 2. 每次發生heroku部署時都運行一些代碼
- 3. 我可以在第二次觸發事件時執行另一組代碼嗎?
- 4. 我可以打開一個文件讓R運行代碼嗎?
- 5. 第一次部署asp.net mvc代碼
- 6. 我可以將簡單的舊.war文件部署到Heroku嗎?
- 7. 使一些代碼只運行一次
- 8. IBM Mobilefirst 7.0 - 我們可以部署IOS本地代碼嗎?
- 9. python類可以並行運行一些代碼嗎?
- 10. RxSwift代碼第一次運行,第二次運行
- 11. 一次可以將一個源代碼部署到Openshift,Heroku和Google App Engine嗎?
- 12. 一次部署時運行腳本
- 13. 從源代碼管理Azure部署 - 代碼第一次遷移
- 14. 檢測代碼的第一次運行
- 15. Coldfusion 2016運行一些代碼3次
- 16. 在第一次運行時運行一次特定的代碼Android
- 17. 當Python計算另一段代碼時,是否可以運行一些代碼?
- 18. 我們可以在運行時將一些函數添加到winform嗎?
- 19. 作爲我的代碼的一部分,我可以執行一個scala代碼文件嗎?
- 20. 我們可以通過使用JREBEL熱部署* .xml文件嗎?
- 21. 我們可以通過純java代碼從java運行flash文件嗎?
- 22. iPhone:我可以一次運行兩個計時器嗎?
- 23. Android O:我們可以製作一個時鐘小部件嗎?
- 24. 無法運行以來的ofbiz部署war文件?
- 25. 我想在Tomcat從.war文件部署我的Web應用程序時運行bash腳本 - 這可能嗎?
- 26. 我可以在哪裏部署一個簡單的J2EE演示war/ear文件?
- 27. 我們可以在運行時修改web.config文件的授權部分嗎?
- 28. Composer.phar可以與代碼一起部署嗎?
- 29. JIT內聯可以將我的代碼內聯到一些.NET運行時彙編代碼中嗎?
- 30. 我可以將可執行JAR文件部署到Azure PaaS嗎?
這樣的話,如果我需要一個程序來連續運行,然後我該怎麼辦? – ayyappa 2011-03-17 08:11:33
您可以執行System.exec來啓動進程。即使應用程序未部署或容器停止,該進程仍會繼續運行。 – 2011-03-17 08:15:16
先生,我需要運行一個可以在部署後在後臺連續運行的servlet ..我該怎麼做?有什麼建議麼? – ayyappa 2011-03-17 08:35:32