UFO ET IT

Tomcat 서블릿 앱의 백그라운드 스레드

ufoet 2020. 12. 4. 21:31
반응형

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

반응형