[SPRING] Spring ApplicationListener가 webapp에서 두 번 실행됩니다.
SPRINGSpring ApplicationListener가 webapp에서 두 번 실행됩니다.
기본 사용자 정보 데이터를로드하기 때문에 webapp 시작 당 한 번만 실행해야하는 응용 프로그램 수신기가 있습니다.
public class DefaultUsersDataLoader implements ApplicationListener<ContextRefreshedEvent> {
@Override
@Transactional
public void onApplicationEvent(ContextRefreshedEvent e) {...}
}
어쨌든, 두 번 실행됩니다 : 응용 프로그램 시작시 및 첫 번째 요청이 서버에 도착할 때. 왜 이런 일이 일어나고 어떻게 막을 수 있습니까?
해결법
-
==============================
1.일반적으로 Spring MVC 애플리케이션에는 ContextLoaderListener와 DispatcherServlet이 둘 다있다. 두 컴포넌트는 모두 자신의 ApplicationContext를 생성하며, 둘 다 ContextRefreshedEvent를 발생시킨다.
일반적으로 Spring MVC 애플리케이션에는 ContextLoaderListener와 DispatcherServlet이 둘 다있다. 두 컴포넌트는 모두 자신의 ApplicationContext를 생성하며, 둘 다 ContextRefreshedEvent를 발생시킨다.
DispatcherServlet은 ContextLoaderListener에 의해 부모로 생성 된 ApplicationContext를 사용합니다. 하위 컨텍스트에서 시작된 이벤트는 상위 컨텍스트로 전파됩니다.
이제 루트 컨텍스트 (ContextLoaderListener에 의해로드 된 컨텍스트)에 ApplicationListener
가 정의되어 있으면 이벤트를 두 번 받게됩니다. -
==============================
2.Listener 클래스의 메서드에 @EventListener 주석을 달지 마십시오.
Listener 클래스의 메서드에 @EventListener 주석을 달지 마십시오.
from https://stackoverflow.com/questions/27859182/spring-applicationlistener-gets-fired-twice-on-webapp by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring MVC : @ResponseStatus (이유 = '')를 Tomcat의 @ResponseBody 예외 핸들러에서 사용하기 (0) | 2019.04.08 |
---|---|
[SPRING] 스프링 보안 로그 아웃 처리 (0) | 2019.04.08 |
[SPRING] org.springframework.web.client.HttpClientErrorException : 400 잘못된 요청 (0) | 2019.04.08 |
[SPRING] 스프링 배치 "기본"컨텍스트 변수는 무엇입니까? (0) | 2019.04.08 |
[SPRING] Spring WebApplicationContext에서 런타임시 빈 인스턴스를 추가하는 방법은? (0) | 2019.04.08 |