웰제오의 개발 블로그

EntityManagerFactoryBuilder could not be found 에러 원인과 해결 본문

개발

EntityManagerFactoryBuilder could not be found 에러 원인과 해결

웰치스제로오렌지 2023. 10. 9. 17:02
***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method entityManagerFactory in ... required a bean of type 'org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder' in your configuration.

 

작업도중 위와 같은 에러를 만났다.

MultiDataSource 환경에서 AutoConfiguration 컨디션이 충족되지 못해 EntityManagerFactoryBuilder 빈이 생성되지 않은것이 원인 이었고

  • DataSource 빈 중 하나에 @Primary 어노테이션을 추가
  • EntityManagerFactoryBuilder 를 포함한 프로젝트에 필요한 빈들 수동 생성

둘 중 편한 방식으로 문제를 해결할 수 있다.

 

 


자세한 설명

 

EntityManagerFactoryBuilder 는 JpaBaseConfiguration 에서 AutoConfiguration 을 통해 생성 되는 빈 이다

org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration#entityManagerFactoryBuilder


Condition 으로는 ConditionalOnMissingBean 밖에 안보이는데... 이게 MultiDataSource 랑 무슨 상관이 있다는 걸까?

entityManagerFactoryBuilder 빈 생성 메소드가 의존하는 JpaVendorAdapter 를 봐도 이상한 점은 안보인다

얘도 똑같이 conditionalOnMissingBean 이라 특별한 이유는 찾을 수 없다

 

JpaBaseConfiguration 을 다시 살펴보면, abstract class 임을 확인할 수 있는데,

애초에 이름부터가 'Base' 였다

 

해당 추상클래스의 구현체를 따라가 보면 HibernateJpaConfiguration 을 확인할 수 있다

 

위 사진에서 볼 수 있듯, 해당 configuration 의 컨디션은 ConditionalOnSingleCandidate

왜 MultiDataSource 환경에서 Primary 한 DataSource 가 없으면 EntityManagerFactoryBuilder 빈이 생성되지 않는지 확인할 수 있다

Comments