훈훈훈
Spring boot :: Kotlin으로 Event Listener 사용하기 본문
이번에는 Spring boot에서 Event Listener를 사용하는 것에 대하여 정리해보려고 한다.
Event Listener를 사용하게된 계기는 Spring boot Application 시작 및 종료 시 특정 이벤트를 수행시키기 위해서 여러 방법을 찾던 중 가장 나은 방법으로 판단하게 되어 사용하게 되었다.
비슷한 기능으로는 @PostConstruct와 @PreDestory가 있지만 해당 기능은 Bean이 생성 시점에 실행되기 때문에 이벤트가 실행되는 시점은 내가 원하는 시점과 약간 차이가 발생한다. 따라서 해당 기능은 사용하지 않고 Event Listener를 사용하였다.
예제 코드
@Component
class StartTest {
private val logger = LoggerFactory.getLogger(this::class.java)
@EventListener
fun onApplicationEvent(event: ApplicationStartedEvent) {
logger.info("Application Start !!")
}
}
@Component
class CloseTest {
private val logger = LoggerFactory.getLogger(this::class.java)
@EventListener
fun onApplicationEvent(event: ContextClosedEvent) {
logger.info("Context Closed")
}
}
예제 코드는 위와 같다.
Application이 시작할때 "Application Start !!" 라는 로그를 찍는 StartTest 클래스와 종료 시 "Contexted Closed" 로그를 찍는 CloseTest 클래스 두 개를 만들었다.
Application 시작 시에는 ApplicationStartedEvent 클래스를 상속 받아 인자로 넘겼고, 종료 시에는 마찬가지로 ContextClosedEvent 클래스를 상속 받아 인자로 넘겼다.
각각의 클래스에 대한 자세한 내용은 공식 문서에서 확인할 수 있으며, 아래 링크 참고 바란다.
ApplicationStartedEventApplicationStartedEventㅁ
위의 코드는 스프링 4.2에서 부터 사용할 수 있는 @EventListener 를 사용하였다.
이전에는 ApplicationListener를 상속 받은 후에 사용할 수 있었지만, 이제는 @EvnetListener 붙여주면 기능은 그대로 사용하면서 코드를 간결하게 작성할 수 있다.
이제는 @EventListener를 사용하면 간단하게 작성할 수 있지만, 그래도 코드 동작 이해를 위해 ApplicationListener를 사용하면 아래와 같이 작성할 수 있다.
@Component
class StartEvent: ApplicationListener<ApplicationStartedEvent> {
private val logger = LoggerFactory.getLogger(this::class.java)
override fun onApplicationEvent(event: ApplicationStartedEvent) {
logger.info("started!!")
}
}
@Component
class CloseEvent: ApplicationListener<ContextClosedEvent> {
private val logger = LoggerFactory.getLogger(this::class.java)
override fun onApplicationEvent(event: ContextClosedEvent) {
logger.info("Closed!!")
}
}
실행 결과
'Spring Framework > Kotlin' 카테고리의 다른 글
Spring boot :: Multipart upload API using Amazon S3 API 구현 과정 정리 (0) | 2020.11.09 |
---|---|
Spring boot :: LocalDate Deserialize(serialize) 이슈 정리 (0) | 2020.08.30 |
Spring Boot :: Kotlin과 JPA를 사용하여 간단한 API 만들기 (4) | 2020.06.14 |
Spring Boot :: Kotlin으로 간단한 CRUD API 만들기 (3) | 2020.05.30 |