멀티 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가 포함 가능한 줄 알았다.
하지만 에러가 발생해서 중복 등록이 허용되지 않는 다는 걸 확인함
패키지 안에 포함만 되면 Repository는 무조건 스캔되고 Bean으로 등록된다
따라서 애초에 master/slave 각각 별도의 Repository 패키지를 구성해야
중복 없이 깔끔하게 나뉘고 유지 보수도 쉬워진다 판단
@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 폴더를 명확이 나누는 설계가 핵심이다.