Kullanabileceğim herhangi bir yöntem veya API var mı, böylece yeni bir WAR dosyasını dağıttığımda, kodun bir kısmı çalıştırılmalı veya Tomcat başladığında, ilgili sunucu sürekli olarak bir kod başlatmalı veya çalıştırmalıdır.Bir WAR dosyasını ilk dağıttığımızda bazı kod çalıştırılabilir mi?
cevap
Web.xml dosyasına "ContextListener" ekleyebilirsiniz. Bu sınıfın bir örneği, Webb uygulaması WAR dağıtımı/başlatılmasıyla ilgili olduğunda oluşturulacaktır.
Bu kod, uygulama dağıtılana kadar çalışmaya devam edecek bir iş parçacığı başlatabilir.
Örnek: Herhangi bir örneğini göstermez sadece cevap beri eski soruyu Canlandırıcı http://www.javafaq.nu/java-example-code-233.html
.
ServletContextListener
dinleyici ve yöntemlerinicontextInitialized()
vecontextDestroyed()
Uygulanışı: Bir web uygulaması WAR devreye girmemiş/dağıtıldığı veya Tomcat her başlatıldığında kod özel bir parçasını çalıştırmak için/Gerekirse, durdu.
- Tomcat uygulamanızı bilmesini sağlayın. documentation'a göre, uygulama sınıfını dağıtım tanımlayıcısına ekleyebilir,
WebListener
ile ek açıklama ekleyebilir veyaServletContext
'da tanımlananaddListener()
yöntemlerinden birini kullanarak kaydedebilirsiniz.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); } } }
ve
web.xml
üzere aşağıdaki (veya alternatif olarak,WebListener
ek açıklama veyaaddListener()
yöntemi kullanmak) ekleyin: Burada
(this post göre) bir örnektir
<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>
ı Bazı kodları yalnızca uygulama (* .war) dağıtımında çalıştırmanın bir yolunu bulun: , en azından java servlet ile jarse uygulamaları için çalışır javax.ws.rs.core.Application kullanarak.
ApplicationConfig.java dosyasındaki uygulama (aşağıya bakın), uygulama dağıtımında çağrılan bir public getClasses yöntemini içerir. Bu nedenle, getClasses uygulamasına kod eklemek, uygulama dağıtımında yürütülmesine neden olur. Fark ettiğim tek mağara, bu fonksiyona iki kez garip geliyor, nedenini bilmiyorum, bu yüzden kodumun zaten çalışıp çalışmadığını öğrenmek için ApplicationConfig sınıfında global bir değişken ekledim. i ne yapmalıyım sonra sürekli çalıştırmak için o programı gerekiyorsa, o halde
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. İmzalı bir Jar çalıştırılabilir olarak çalıştırılabilir mi?
- 2. Içerik tanımını WAR WAR içinde
- 3. Spring Boot Kaynakları Yürütülebilir WAR, WAR ve STS'den
- 4. SaltStack hatası: WAR dosyasını önbelleğe alamadı
- 5. Apache Ant, Tomcat'e .war dosyasını nasıl dağıtır?
- 6. Çoklu çalıştırılabilir dosyalar oluşturan bir Android.mk dosyasını sadeleştirin
- 7. typescript - tüm bir klasöre karşı çalıştırılabilir mi?
- 8. Dağıtılmış bir WAR dosyasını patlatmak için JBoss'u nasıl alabilirim?
- 9. Eclipse'den bir WAR dosyasını dışa aktarırken SVN dosyalarını yoksay?
- 10. Eclipse'den gönderildikten sonra WAR-File'da gerekli bazı kütüphaneler eksik - neden?
- 11. Babil nakledilen kod, polifilizatsız tarayıcıda çalıştırılabilir
- 12. Uzaktan Powershell Oturumu'ndan Vmware PowerCLI çalıştırılabilir mi?
- 13. Makefile'dan Çalıştırılabilir Çalıştırılabilir
- 14. VBA Kod dosyasını açmak için kod
- 15. Varlık Framework - Kod İlk -
- 16. Varlık Framwork Kod İlk Göçler
- 17. "do | |" ifadesinin anlamı nedir? Ruby'de mi? Bazı Yakut kod okuma
- 18. Kod ilk doğrulamayı geçmiyor
- 19. Kod ilk varlık çerçevesi
- 20. Kod İlk Kesişim Tablosu
- 21. Appcfg'yi kullanarak Google uygulama motoruna (GAE) .war dosyasını yükleyin.
- 22. Kod İlk ve Veri Tabanı İlk
- 23. Programlı kod ilk geçişleri oluşturma
- 24. C#: Ben bu kod sıralamak bazı yerlerde gördüğüm bir kukla
- 25. Varlık çerçevesi Kod İlk Bire Bir ilişki
- 26. Thor Çalıştırılabilir Görev Adı
- 27. Sonar'ın LCOV dosyasını Kod Kapsamı
- 28. EF4.1 Kod İlk: Kayıtlı Prosedürü
- 29. Entity Framework Kod Dağıtımı İlk
- 30. EF Kod İlk 4.1 - varsayılan
: Burada
benim çözüm mü? – ayyappaBir işlemi başlatmak için System.exec dosyasını kullanabilirsiniz. Bu işlem, uygulama yapılmadığında veya kapsayıcı durduğunda bile çalışmaya devam eder. –
Efendim, dağıtımından sonra arka planda sürekli olarak çalışabilen bir sunucu uygulamasını çalıştırmam gerekiyor .. bunu nasıl yaparım? baska öneri? – ayyappa