Tomcat 서블릿 앱의 백그라운드 스레드
이 질문에 이미 답변이 있습니다.
저는 Tomcat에 익숙하지 않습니다. 내 머리 속에는 기본적으로 호출 사이에 JVM을 저장하는 cgi 서버로 추상화되어 있습니다.하지만 그 이상을 할 수 있다는 것을 알고 있습니다.
Tomcat 서버가 시작될 때 주기적으로 서버 컨텍스트를 업데이트 하는 백그라운드 스레드 를 시작하는 방법을 찾고 있습니다 (내 특정 경우에는 다른 서비스의 하트 비트를 수신하고 가용성 정보를 업데이트하는 스레드이지만 상상할 수 있습니다. 이를위한 다양한 용도).
이를 수행하는 표준 방법이 있습니까? Context의 시작과 업데이트 / 쿼리 모두?
관련 문서 및 / 또는 코드 샘플에 대한 모든 포인터를 주시면 감사하겠습니다.
WAR이 배포 될 때 스레드를 시작하려면 web.xml 내에 컨텍스트 리스너를 정의 할 수 있습니다.
<web-app>
<listener>
<listener-class>com.mypackage.MyServletContextListener</listener-class>
</listener>
</web-app>
그런 다음 해당 클래스를 다음과 같이 구현하십시오.
public class MyServletContextListener implements ServletContextListener {
private MyThreadClass myThread = null;
public void contextInitialized(ServletContextEvent sce) {
if ((myThread == null) || (!myThread.isAlive())) {
myThread = new MyThreadClass();
myThread.start();
}
}
public void contextDestroyed(ServletContextEvent sce){
try {
myThread.doShutdown();
myThread.interrupt();
} catch (Exception ex) {
}
}
}
Tomcat 서버가 시작될 때 백그라운드 스레드를 시작하는 방법을 찾고 있습니다.
웹 애플리케이션 이 Tomcat에 의해 시작될 때 백그라운드 스레드를 시작하는 방법을 찾고 있다고 생각합니다 .
이것은 ServletContextListener를 사용하여 수행 할 수 있습니다 . web.xml에 등록되며 앱이 시작되거나 중지 될 때 호출됩니다. 그런 다음 스레드 (또는 ExecutionService)를 생성하는 일반적인 Java 방법을 사용하여 스레드를 생성 (나중에 중지) 할 수 있습니다.
퍼팅 <load-on-startup>1</load-on-startup>
에서 <servlet>
서블릿을 강제로 당신의 web.xml 블록은의 init()
Tomcat을 시작으로 오히려 도착하는 첫 번째 요청을 기다리는 것보다 빨리 일어날 수 있습니다. 에서 백그라운드 스레드를 생성하려는 경우 유용합니다 init()
.
나는 Chris가 준 매우 상세한 대답을 약간 변경합니다. 배경 스레드가 필요한 다른 비 데몬 스레드가 작동하는 한 기본적으로 스레드를 활성 상태로 유지 myThread
하는 데몬 스레드로 설정 합니다 myThread.setDaemon(true);
. 이 모든 스레드가 완료되면 데몬 스레드가 JVM에 의해 중지되고 .NET에서 직접 처리 할 필요가 없습니다 contextDestroyed
. 그러나 그것은 단지 나의 2 센트입니다.
스프링 기반 프레임 워크를 사용하는 또 다른 방법은 beans.xml에서 초기화하려는 클래스 / 스레드를 지정할 수 있습니다. 따라서 바람둥이가 시작되면 beans.xml은 그 안에 언급 된 모든 클래스를 초기화합니다. 필요한 경우 생성자 인수를 전달할 수도 있습니다. 아래는 동일한 예입니다.
beans.xml
<bean id="monitoringSvc" class="com.mypackage.MonitoringService">
<constructor-arg value="60"></constructor-arg>
</bean>
MonitoringService.java
public class MonitoringService{
private MyThread myThread;
public MonitoringService(int seconds){
myThread = new MyThread(seconds);
myThread.start();
}
}
참고 URL : https://stackoverflow.com/questions/791986/background-thread-for-a-tomcat-servlet-app
'UFO ET IT' 카테고리의 다른 글
어떤 종류의 목록 (0) | 2020.12.04 |
---|---|
Null 병합 연산자 각도 2 (0) | 2020.12.04 |
x264 C API를 사용하여 일련의 이미지를 H264로 인코딩하는 방법은 무엇입니까? (0) | 2020.12.04 |
아코디언 테이블 셀-uitableviewcell을 동적으로 확장 / 축소하는 방법은 무엇입니까? (0) | 2020.12.04 |
관리 빈과 백업 빈의 차이점 (0) | 2020.12.04 |