[Spring Boot] 같은 타입의 빈이 여러개인 경우(required a single bean, but (n) were found)

SOUTH DARIA·2022년 2월 2일
2
post-thumbnail

같은 타입의 빈이 여러개인 경우 해결을 위한 방법

build 시 해당 에러가 발생했다.![]![]

~~~
required a single bean, but 2 were found
~~~

Action:

Consider marking one of the beans as @Primary, 
updating the consumer to accept multiple beans, 
or using @Qualifier to identify the bean that should be consumed

@RequiredArgsConstructor Annotation으로 의존성을 주입할 때,

위와 같이 같은 타입의 빈이 여러개인 경우 오류와 함께 해결을 위한 방법으로 3가지를 제시한다.

  1. Consider making one of the beans as @Primary
  2. updating the consumer to accept multiple beans
  3. using @Qualifier to identify the bean that should be consumed

@Primary Annotation 활용

@Primary Annotation을 활용하면 BookRepository를 상속받은 class들 중, 최우선으로 의존성을 부여받게 된다.

@Getter
@Setter
@Configuration
@ConfigurationProperties(prefix = "data-es")
@Primary
public class DataElasticSearchProperties extends ElasticSearchProperties {

    Indecies indecies;

    public String getKmeansIndexName() {
        return ofNullable(this.indecies)
                .map(Indecies::getKmeansIndexName)
                .orElse("index");
    }

    @Getter
    @Setter
    public static class Indecies {
        private String kmeansIndexName;
    }
}

@Qualifier Annotation 활용

@Slf4j
@ComponentScan
@EnableConfigurationProperties(DataElasticSearchProperties.class)
@Configuration
@RequiredArgsConstructor
public class DataElasticSearchConfiguration extends AbstractElasticsearchConfiguration {
	@Qualifier("dataElasticSearchProperties")
    private final DataElasticSearchProperties dataElasticSearchProperties;
}

해당 타입의 Bean 모두 주입 받기

@Slf4j
@ComponentScan
@EnableConfigurationProperties(DataElasticSearchProperties.class)
@Configuration
@RequiredArgsConstructor
public class DataElasticSearchConfiguration extends AbstractElasticsearchConfiguration {
    private final List<DataElasticSearchProperties> dataElasticSearchProperties;
}

나의 경우에는 1번의 방법으로 처리했다 !!

profile
고양이와 함께 - 끄적끄적 개발하고 이씁니다 ~!

0개의 댓글