Я получаю следующее сообщение об ошибке при попытке autowire два бобов не используяNoUniqueBeanDefinitionException весной аннотация привод конфигурации
Нет квалификационную боба типа [javax.jms.ConnectionFactory] определяются: ожидается совпадение одного боб, но нашел 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;
}
}
Есть идеи, что не так в этом коде? Это кажется прямым, но указание Qualifier не работает, я также попытался использовать @Resource. Что мне там не хватает?
Любая помощь приветствуется.
весной путает между @Resource (имя = «aConnectionFactory») и @Bean (name = "aConnectionFactory"). Поскольку консоль предполагает, что вам нужно отметить один из них как первичный (тот же для bConnectionFactory) – kuhajeyan