새로운 WAR 파일을 배포 할 때마다 코드 일부가 실행되어야하거나 Tomcat이 시작될 때마다 해당 서블릿이 시작되거나 일부 코드가 계속 실행되도록 사용할 수있는 방법이나 API가 있습니까?WAR 파일을 처음 배포 할 때 일부 코드가 실행될 수 있습니까?
6
A
답변
6
web.xml에 "ContextListener"를 포함 할 수 있습니다. 이 클래스의 인스턴스는 Webb 애플리케이션 WAR이 전개/시작될 때 생성됩니다.
이 코드는 앱이 배포 될 때까지 계속 실행되는 스레드를 시작할 수 있습니다.
예 : 어떤 예를 표시하지 않는 유일한 대답 년부터 오래된 질문을 되살리는 http://www.javafaq.nu/java-example-code-233.html
9
.
- 가
ServletContextListener
청취자와 그 방법contextInitialized()
및contextDestroyed()
구현 : 웹 애플리케이션 WAR가 배포 취소/배포 또는 Tomcat이 시작될 때마다 코드의 사용자 지정 조각을 실행하기 위해는/당신이 필요 중지.
- 구현에 대해 Tomcat에 알리십시오. documentation에 따르면 구현 클래스를 배포 설명자에 추가하거나
WebListener
이라는 주석을 달거나ServletContext
에 정의 된addListener()
메서드 중 하나를 통해 등록 할 수 있습니다.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()
방법 사용)를 추가한다 : 여기
은 (this post 기준) 일례이다
<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) 배포시에만 일부 코드를 실행하는 방법을 찾으십시오. 자바 서블릿이있는 저지 서블릿에 적어도 작동합니다. 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. WAR 파일을 배포 할 때 오류가 발생했습니다.
- 2. war 파일을 모든 서버에 배포 할 수 있습니까?
- 3. WAR 파일을 Liferay에 배포 할 때 SQL 테이블이 생성되지 않았습니다.
- 4. ZipOutputStream을 사용하여 만든 .war 파일을 배포 할 수 없습니다.
- 5. Tomcat/Eclipse에 WAR 배포
- 6. Netbeans에서 Tomcat으로 WAR 파일을 배포 할 때의 문제
- 7. 이클립스에서 war 파일을 자동화 (스크립트) 할 수 있습니까?
- 8. iPhone UIActivityIndicator가 처음 실행될 때 작동하지 않습니다.
- 9. 배포 된 서버에서 jar/war 파일을 업데이트 한 다음 새 jar/war 파일을 다시로드 할 수 있습니까?
- 10. 전쟁 배포 오류가 난 내 war 파일을 배포하고 때
- 11. JBoss WAR 배포 문제 (캐싱 문제가 있습니까?)
- 12. 서버 배포 디렉토리에 war 파일을 설치하십시오.
- 13. 배포 WAR V3
- 14. GlassFish에 WAR 파일 배포
- 15. 공유 호스트에 WAR 파일 배포?
- 16. 코드가 실행될 때까지 중지
- 17. Grails WAR 배포 문제
- 18. Eclipse에서 WAR 파일을 빌드 할 때 배포 변수를 사용하는 방법은 무엇입니까?
- 19. GWT 배포 혼란, 일부 지침을주십시오.
- 20. 일부 프로세스가 시작될 때 알림을받을 수 있습니까?
- 21. iPhone이 코드가 실행될 때까지 대기합니다.
- 22. 일부 정적 HTML 파일을 포함하고 있습니까?
- 23. AIR 2.0이 처음 실행될 때 EULA 대화 상자가 표시되지 않음
- 24. 수정할 수있는 속성 파일로 war 파일 배포
- 25. 저장할 때 엔티티의 일부 필드를 제외 할 수 있습니까?
- 26. 현명한 모듈의 war 파일 배포 방법
- 27. ASP.NET에서 "WAR 파일"유형 배포를받을 수 있습니까?
- 28. 배포 프로젝트에 파일을 동적으로 추가 할 수 있습니까?
- 29. Eclipse에서 WAR 파일을 내보낼 때 SVN 파일을 무시합니까?
- 30. JBoss 컨테이너에 배포 된 모든 .war 파일에서 속성 파일을 읽을 수 있습니까?
: 여기
내 솔루션입니다? – ayyappaSystem.exec을 사용하여 프로세스를 시작할 수 있습니다. 이 프로세스는 앱을 배포 취소하거나 컨테이너를 중지하더라도 계속 실행됩니다. –
선생님, 배포 후 백그라운드에서 계속 실행할 수있는 서블릿을 실행해야합니다. 어떻게해야합니까? 어떤 제안? – ayyappa