gpt4 book ai didi

spring - Spring 注解驱动配置中的 NoUniqueBeanDefinitionException

转载 作者:行者123 更新时间:2023-12-05 00:17:19 28 4
gpt4 key购买 nike

尝试使用 Autowiring 两个 bean 时出现以下错误

No qualifying bean of type [javax.jms.ConnectionFactory] is defined: expected single matching bean but found 2: aConnectionFactory, bConnectionFactory


Description:

Parameter 1 of method jmsListenerContainerFactory in org.springframework.boot.autoconfigure.jms.JmsAnnotationDrivenConfiguration required a single bean, but 2 were found:
- aConnectionFactory: defined by method 'aConnectionFactory' in package.Application
- bConnectionFactory: defined by method 'bConnectionFactory' in package.Application


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

我有这个注释驱动的配置:
@SpringBootApplication
@EnableIntegration
@IntegrationComponentScan
public class Application extends SpringBootServletInitializer implements
WebApplicationInitializer {

@Resource(name = "aConnectionFactory")
private ConnectionFactory aConnectionFactory;

@Resource(name = "bConnectionFactory")
private ConnectionFactory bConnectionFactory;

@Bean
public IntegrationFlow jmsInboundFlow() {
return IntegrationFlows
.from(
Jms.inboundAdapter(aConnectionFactory)
.destination(aQueue),
e -> e.poller( Pollers.fixedRate(100,
TimeUnit.MILLISECONDS).maxMessagesPerPoll(100))
).channel("entrypoint")
.get();
}

@Bean
public IntegrationFlow jmsInboundFlowB() {
return IntegrationFlows
.from(
Jms.inboundAdapter(bConnectionFactory)
.destination(bQueue),
e -> e.poller( Pollers.fixedRate(100,
TimeUnit.MILLISECONDS).maxMessagesPerPoll(100))
).channel("entrypoint")
.get();
}


@Bean(name = "aConnectionFactory")
@Profile({"weblogic"})
public ConnectionFactory aConnectionFactory() {
ConnectionFactory factory = null;
JndiTemplate jndi = new JndiTemplate();
try {
factory = (ConnectionFactory) jndi.lookup("jms/ConnectionFactory");
} catch (NamingException e) {
logger.error("NamingException for jms/ConnectionFactory", e);
}

return factory;
}

@Bean(name = "bConnectionFactory")
@Profile({"weblogic"})
public ConnectionFactory bConnectionFactory() {
ConnectionFactory factory = null;
JndiTemplate jndi = new JndiTemplate();
try {
factory = (ConnectionFactory) jndi.lookup("jms/ConnectionFactory");
} catch (NamingException e) {
logger.error("NamingException for jms/ConnectionFactory", e);
}

return factory;
}

}

任何想法这段代码有什么问题?这似乎很简单,但指定限定符不起作用,我也尝试使用@Resource。我在那里缺少什么?

任何帮助表示赞赏。

最佳答案

你的代码没有问题。

那只是JmsAnnotationDrivenConfiguration来自 Spring Boot 不喜欢你的两个 ConnectionFactory bean,但只需要一个。

  • 为什么不遵循该报告建议并用 @Primary 标记其中之一? ?
  • 看起来您没有使用 Spring Boot JMS 自动配置功能,因此禁用 JmsAnnotationDrivenConfiguration 很简单。 :http://docs.spring.io/spring-boot/docs/1.4.1.RELEASE/reference/htmlsingle/#using-boot-disabling-specific-auto-configuration
  • 关于spring - Spring 注解驱动配置中的 NoUniqueBeanDefinitionException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40471181/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com