본문으로 바로가기
728x90
반응형
SMALL

Parameter 1 of method simpleRabbitListenerContainerFactory in org.springframework.boot.autoconfigure.amqp.RabbitAnnotationDrivenConfiguration required a single bean, but 2 were found:

`1 개의 빈만 매칭되야 하지만 2개의 빈이 존재한다며 오류가 발생한다.`

프로그래밍 하다보면 같은 타입의 빈을 중복으로 등록할때가 있다.

나같은 경우 RabbitMQ 커넥션을 2개를 등록하면서 해당 오류 `Parameter 1 of method simpleRabbitListenerContainerFactory in org.springframework.boot.autoconfigure.amqp.RabbitAnnotationDrivenConfiguration required a single bean, but 2 were found:`가 발생하였다.

문제해결

@Primary 사용

스프링은 `하나의 타입에 빈 객체가 여러개인경우` 그 중 `우선순위를 갖는 빈`이라는것을 `지정`할 수 있도록 `@Primary 어노테이션`을 제공하고 한다.

xml에서는 `primary="true"`로 설정한다.

<bean primary="true" id="externalConnectionFactory"
      class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory ">
    <constructor-arg value="${rabbit.host}"/>
    <property name="username" value="${rabbit.username}"/>
    <property name="password" value="${rabbit.password}"/>
</bean>

<bean id ="internalConnectionFactory"
      class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
    <constructor-arg value="${rabbit.host}"/>
    <property name="username" value="${rabbit.username}"/>
    <property name="password" value="${rabbit.password}"/>
    <property name="virtualHost" value="${rabbit.vrhost}"/>
</bean>

그러나 @Primary도 중복으로 사용되면 `NoUniqueBeanDefinitionException`이 발생하기 때문에 주의하자.

728x90
반응형
LIST