문제 상황

멀티 DB 설정(Master/Slave)을 구성한 후, 애플리케이션 실행 시 userRepository 충동 에러 발생


sesettlement-service  | The bean 'userRepository', defined in com.sparta.settlementservice.user.repository.UserRepository defined in @EnableJpaRepositories declared on SlaveDBConfig, could not be registered. A bean with that name has already been defined in com.sparta.settlementservice.user.repository.UserRepository defined in @EnableJpaRepositories declared on MasterDBConfig and overriding is disabled.

가설

basePackages만 지정하면 실제 repo코드에서 master, slave 선택하는 원리로 이해해 동일 repo가 포함 가능한 줄 알았다.

하지만 에러가 발생해서 중복 등록이 허용되지 않는 다는 걸 확인함

접근

해결 방법

@Configuration
@EnableJpaRepositories(
        basePackages = {"com.sparta.settlementservice.batch.repo.master",
                "com.sparta.settlementservice.streaming",
                "com.sparta.settlementservice.user"},
        entityManagerFactoryRef = "masterEntityManagerFactory",
        transactionManagerRef = "masterTransactionManager"
)

@Configuration
@EnableJpaRepositories(
        basePackages = "com.sparta.settlementservice.batch.repo.slave",
        entityManagerFactoryRef = "slaveEntityManagerFactory",
        transactionManagerRef = "slaveTransactionManager"
)

Repository 패키지를 완전히 분리

각 설정 클래스에서 명확하게 basePackages 분리 지정

결과

basepackages가 주가 아니라 master slave구조에 맞는 repo 폴더를 명확이 나누는 설계가 핵심이다.