gpt4 book ai didi

spring - 使用 spring 集成自动配置 ActiveMQ

转载 作者:行者123 更新时间:2023-12-04 14:13:09 29 4
gpt4 key购买 nike

在当前版本中,spring boot 还可以在检测到 ActiveMQ 在类路径上可用时配置 ConnectionFactory。如果存在代理,则会自动启动和配置嵌入式代理。

这在使用 JMSTemplate 时似乎是正确的。如果我想使用 spring 集成自动配置,那么不幸的是这不起作用。 ActiveMQ 似乎是在 spring 集成之后配置的。 Spring boot 报告缺少连接工厂的错误。
为此,我正在使用 spring boot 版本 1.1.4 和最新版本的 spring 集成。

我从 spring boot 得到这个堆栈跟踪:

2014-08-08 09:24:21.050 ERROR 6728 --- [           main]    
o.s.boot.SpringApplication : Application startup failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'org.springframework.integration.jms.JmsSendingMessageHandler#0':
Cannot create inner bean '(inner bean)#54930080' of type
[org.springframework.integration.jms.DynamicJmsTemplate] while setting constructor
argument; nested exception is org.springframework.beans.factory.BeanCreationException:
Error creating bean with name '(inner bean)#54930080': Cannot resolve reference to
bean 'connectionFactory' while setting bean property 'connectionFactory'; nested
exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean
named 'connectionFactory' is defined
at
org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(
BeanDefinitionValueResolver.java:290)
at
org.springframework.beans.factory.support.BeanDefinitionValueResolver.
resolveValueIfNecessary(BeanDefinitionValueResolver.java:129)

对我来说,就 spring 集成和 jms 模板而言,spring boot 自动配置中的依赖项似乎不正确。
标准 JMS 自动配置如下所示:
@ConditionalOnClass(JmsTemplate.class)
@ConditionalOnBean(ConnectionFactory.class)
@EnableConfigurationProperties(JmsProperties.class)
@AutoConfigureAfter({ HornetQAutoConfiguration.class,
ActiveMQAutoConfiguration.class })
public class JmsAutoConfiguration

Spring 集成如下所示:
@Configuration
@ConditionalOnClass(EnableIntegration.class)
@AutoConfigureAfter(JmxAutoConfiguration.class)
public class IntegrationAutoConfiguration {

spring 集成创建的关于连接工厂和事件 mq 的动态 jms 模板不应该至少有某种自动配置。考虑到 spring boot ref docs,我希望使用 jms 进行正确的自动配置以进行 spring 集成?

最佳答案

好的,我知道了。这是一个错误(我认为)。

ActiveMQConnectionFactoryConfiguration创建一个名为“jmsConnectionFactory”的 bean,但查看您的堆栈跟踪(上图)Spring Integration 正在寻找要命名的 bean:“connectionFactory”

编辑: INT-3941打开

解决方法:

@Configuration
public static class SpringBootVsIntegraionWorkaround {
@Autowired
GenericApplicationContext genericApplicationContext;

@PostConstruct
public void init() {
genericApplicationContext.registerAlias("jmsConnectionFactory", "connectionFactory");
}
}

关于spring - 使用 spring 集成自动配置 ActiveMQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25193079/

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