SpringBoot - SpringApplication ( applicationContext 등록 이전의 이벤트 Listener 등록 하기)
applicationContext가 등록되기 전에 발생한 이벤트를 Listen하는 리스너를 등록하려면 어떻게 해야할까?
@Component
public class SampleListener implements ApplicationListener<ApplicationStartingEvent> {
@Override
public void onApplicationEvent(ApplicationStartingEvent applicationStartingEvent) {
System.out.println("===================");
System.out.println("application start ");
System.out.println("===================");
}
}
SampleListner를 만들고, ApplicationListenr
를 구현한다. Generic으로 발생할 이벤트를 명시해 준다. 여기에서는 ApplicationStartingEvent
클래스는 스프링부트에서 제공하는 Event 클래스이다. 문제는 해당 이벤트가 applicationContext가 띄기전에 발생하기 때문에, 해당 리스너가 캐치하지 못하는 문제가 발생한다.
해결책
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
// SpringApplication.run(DemoApplication.class, args);
SpringApplication springApplication = new SpringApplication(DemoApplication.class);
springApplication.addListeners(new SampleListner());
springApplication.run(args);
}
}
기존의 SpringBoot 애플리케이션을 만든 Main메서드를 보면, SpringApplication.run()
이라는 static 메서드를 통해서 만든다. 그렇게 되면, SpringApplication을 커스터마이징 할 수 없기 때문에, 새로운 SpringApplication 객체를 만들고 리스너를 추가한다. 이렇게 되면 이전에 작성했던 SampleListner는 빈으로 등록할 필요가 없다. (어차피 해당 이벤트가 applicationContext가 등록되기 전에 발생한 이벤트이니까)
📚 Related Posts
- Spring WebFlux 테스트 방법
- Spring과 MongoDB 연동 실전 가이드
- SpringBoot, MongoDB 시작하기
- Spring Boot 서버 타임존 설정 방법
- SpringBoot CommandLineRunner, ApplicationRunner 초기화 방법
- Jackson, LocalDateTime Serialization, Deserialization 이슈
- Spring Boot, Dockerfile로 이미지 생성, 배포하기
- SpringBoot RabbitMQ 연동하기
- Junit5 정리
- Spring Sentry(에러 트래킹 서비스) 적용하기
- [Spring] 빈 주입하는 방법 && Best Practice
- Thymeleaf 실무에서 자주 사용하는 것들
- Thymeleaf Collection 정보 화면에 렌더링하기
- Spring, JPA를 이용한 REST API 만들기
- [Spring] MultipartFile을 이용한 파일 업로드
- [Spring] 모델 검증(validation)
- [Spring]HandlerMethodArgumentResolver 인터페이스
- [Spring] DispatcherServlet에 대해서 알아보자
- [Spring] MVC 만들어 보기
- [Spring] 메세지 컨버터
- [Spring] MVC 살펴보기
- [Spring] @ConfigurationProperties를 이용해서 properties값들을 클래스로 관리하기
- [Spring] Profile 설정하기
- [Spring] SpringApplication를 통한 코딩
- [Spring Boot] 스프링 부트 3가지 특징
- [Spring] @SpringBootAppllication 어노테이션에 대한 고찰
- [Spring] bean circular dependencies (빈 순환 참조)
- [Spring]Bean에 대해서 알아보자
- SpringBoot, JPA, H2를 이용한 간단한API 작성
- [Spring] Spring Data Common 프로젝트 살펴보기