[Trouble Shooting] Repository Confilict

FeelingXD·2023년 5월 26일
0

1트러블슈팅

목록 보기
1/2
post-thumbnail

❌ 문제 발생

Jpa를 사용하는 프로젝트 진행중 검색기능 구현을 위해 ElasticSearch를 추가하면서 발생


Log

Description:

The bean 'DiaryDocumentRepository' could not be registered. A bean with that name has already been defined and overriding is disabled.

Action:
Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

기존구조는 ElasticSearchRepository 와 JPARepository를 사용하는 레포 구분없이 한 패키지에 작성해두었엇다.
충돌 LOG 를 확인하고 또 ElasticRepository를 작성 이후에 충돌이나고 어플리케이션이 빌드가 되지않았기에 Repository 문제로 인식하고 해당 문제가 발생하는 원인을 찾아보았다.

해결

위 문제의 원인은 JPA Repository 범위를 다른 Repository를 사용하는 어노테이션 과 함깨사용할때 Repository 에 대해 등록하기위해 중복 등록 시도를했기에 발생하였습니다. (필자의 경우 JPARepository ,ElasticSearchRepository)

Spring Data JPA는 따로 설정(BasePackage 등 ) 이없을경우 @SpringbootApplication 시작부터 @Repository가 작성된 모든 클래스를 scan 하게됩니다.

그이후 ElasticSearch 또한 이미 JPA Repository 로 등록된 빈을 또다시 재등록 하려하기 때문에 발생 (위의경우 DiaryDocumentRepository)

내가 해결한 방법

JPA만 사용하는 패키지와 Ealstic을 사용하는 패키지를 구분하고 각각 선언된 Config 에 직접 scan할 패키지 범위를 지정해 주었습니다.

@EnableJpaAuditing
@Configuration
@EnableJpaRepositories(basePackages = {RDS_PACKAGE})
public class JpaConfig {

  static final String RDS_PACKAGE = "custom.repository.jpa";
}
@Configuration
@EnableElasticsearchRepositories(basePackages = {ELASTIC_DOMAIN_PACKAGE})
public class ElasticSearchConfig extends AbstractElasticsearchConfiguration {

  @Value("${elasticsearch.host}")
  private String host;
  @Value("${elasticsearch.index.diary}")
  private String diaryIndex;

  static final String ELASTIC_DOMAIN_PACKAGE = "custom.repository.elastic";


  public String getDiaryIndex() {
    return this.diaryIndex;
  }

  @Override
  public RestHighLevelClient elasticsearchClient() {
    ClientConfiguration clientConfiguration = ClientConfiguration.builder()
        .connectedTo(host)
        .build();
    return RestClients.create(clientConfiguration).rest();
  }
}

참고

[DynamoDB] Spring Data DynamoDB와 JPA 함께 적용후 문제 발생시 해결방법-jojodol

profile
tistory로 이사갑니다. :) https://feelingxd.tistory.com/

0개의 댓글