SPRING/스프링부트
Parameter 1 of method simpleRabbitListenerContainerFactory in org.springframework.boot.autoconfigure.amqp.RabbitAnnotationDrivenConfiguration required a single bean, but 2 were found:
추억을 백앤드하자
2023. 1. 3. 17:43
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