[SPRING] Spring webapp - 응용 프로그램 중지시 스레드 종료
SPRINGSpring webapp - 응용 프로그램 중지시 스레드 종료
다음과 같이 Spring의 ApplicationListener 인터페이스를 사용하여 ScheduledExecutorService를 인스턴스화합니다.
@Component
public class ExecutorsStart implements ApplicationListener<ContextRefreshedEvent> {
private ScheduledExecutorService executor;
@Autowired
Scheduler scheduler;
@Override
public void onApplicationEvent(final ContextRefreshedEvent event) {
executor = Executors.newSingleThreadScheduledExecutor();
scheduler.init();
int delay = 10;
int period = 60;// repeat every 1 minutes.
executor.scheduleAtFixedRate(scheduler, delay, period, TimeUnit.SECONDS);
}
현재 Tomcat은 내가 실행할 때 ./shutdown.sh 메시지와 함께 깨끗하게 종료되지 않습니다.
The web application [/foo] appears to have started a thread named [pool-1-thread-1] but has failed to stop it
그리고 이것은 내가 ScheduledExecutorService를 멈추기위한 코드를 아직 작성하지 않았기 때문인 것으로 보인다.
내 질문입니다 :이 환경에서 어떻게 제대로 수행되어야합니까?
나는 ContextStoppedEvent가 있다는 것을 알아 차렸다. 그래서 그것을 위해 리스너를 구현했다 :
@Component
public class ExecutorsStop implements ApplicationListener<ContextStoppedEvent> {
@Autowired
ExecutorsStart executorsStart;
@Override
public void onApplicationEvent(final ContextStoppedEvent event) {
executorsStart.executor.shutdownNow();
}
하지만 Tomcat이 종료 될 때이 이벤트 핸들러가 호출되지 않는 것 같습니다.
이 방법을 잘못 구현 했나요? 아니면 완전히이 방법을 사용하고 있습니까?
해결법
-
==============================
1.ContextClosedEvent를 찾고 있습니다.
ContextClosedEvent를 찾고 있습니다.
@Component public class ExecutorsStop implements ApplicationListener<ContextClosedEvent> { @Autowired ExecutorsStart executorsStart; @Override public void onApplicationEvent(final ContextClosedEvent event) { System.out.println("Stopped: " + event); } }
Servlet 컨테이너가 종료되면 다양한 ServletContextListener에서 contextDestroyed (..)를 호출하고 Servlet 인스턴스에서 destroy ()를 호출합니다. ContextLoaderListener와 DispatcherServlet은 각각 ApplicationContext에서 close ()를 호출합니다.
from https://stackoverflow.com/questions/22650569/spring-webapp-shutting-down-threads-on-application-stop by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄 + 메이븐 + 하둡 (0) | 2019.04.25 |
---|---|
[SPRING] Spring Hibernate가있는 시퀀스에서 다음 값 얻기 (0) | 2019.04.25 |
[SPRING] 스프링 부트로 CORS 문제 (0) | 2019.04.25 |
[SPRING] 스프링 보안 Oauth2에서 XML을 사용하여 / oauth / check_token을 활성화하는 방법 (0) | 2019.04.25 |
[SPRING] Autowiring :이 종속성에 대한 autowire 후보가 될 것으로 예상되는 적어도 하나의 bean (0) | 2019.04.25 |