@EventListener(ApplicationReadyEvent.class)

sungeun·2023년 5월 2일
0
@EventListener(ApplicationReadyEvent.class)
 public void initData() {
 log.info("test data init");
 itemRepository.save(new Item("itemA", 10000, 10));
 itemRepository.save(new Item("itemB", 20000, 20));
 }

스프링 컨테이너가 완전히 초기화를 다 끝내고, 실행 준비가 되었을 때 발생하는 이벤트.
스프링이 이 시점에 해당 어노테이션이 붙은 initData() 메서드를 호출.

@PostConstruct 를 사용할 경우 AOP 같은 부분이 아직 다 처리되지 않은 시점에 호출될 수 있기 때문에, 간혹 문제가 발생할 수 있음. 예를 들어서 @Transactional 과 관련된 AOP가 적용되지 않은 상태로 호출될 수 있음.

@EventListener(ApplicationReadyEvent.class) 는 AOP를 포함한 스프링 컨테이너가 완전히 초기화 된 이후에 호출되기 때문에 이런 문제가 발생하지 않음.

| 참고자료
인프런 - 김영한님의 [스프링 DB 2편 - 데이터 접근 활용 기술] 강의자료

profile
Back-end Developer

0개의 댓글