Jms 如何结合Spring Boot HornetQAutoConfiguration和CachingConnectionFactory?

Jms 如何结合Spring Boot HornetQAutoConfiguration和CachingConnectionFactory?,jms,spring-boot,hornetq,spring-jms,Jms,Spring Boot,Hornetq,Spring Jms,从Spring Boot 1.1.4迁移到1.2.3,我们遇到以下问题: 在1.1.4下的SpringJava配置中,我们将org.springframework.jms.connection.CachingConnectionFactory与由org.springframework.boot.autoconfigure.jms.hornetq.HornetQAutoConfiguration模板化的jmsConnectionFactory结合在一起,效果很好 在1.2.3中,HornetQAu

从Spring Boot 1.1.4迁移到1.2.3,我们遇到以下问题:

在1.1.4下的SpringJava配置中,我们将
org.springframework.jms.connection.CachingConnectionFactory
与由
org.springframework.boot.autoconfigure.jms.hornetq.HornetQAutoConfiguration
模板化的jmsConnectionFactory结合在一起,效果很好

在1.2.3中,HornetQAutoConfiguration经过了大量修改,现在让我们想知道如何配置CachingConnectionFactory的使用,而不必从头开始编写整个配置

在Spring Boot中使用带有HornetQ的CachingConnectionFactory来缓存JMS
会话
s和
MessageProducer
s是否仍然有效

如果答案是肯定的,那么如何在Spring Boot 1.2.3下配置CachingConnectionFactory


这个问题应该转化为Spring启动问题吗?

这个带有自己的
BeanPostProcessor
的解决方案适合我。您可以在application.properties中使用属性jms.useCachingConnectionFactory=true启用
ConnectionFactory
的缓存

@ConditionalOnProperty(prefix = "jms", value = "useCachingConnectionFactory", havingValue = "true", matchIfMissing = false)
public class CachingConnectionFactoryDecoratingPostProcessor implements BeanPostProcessor
{

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException
    {
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException
    {
        if (bean instanceof ConnectionFactory)
        {
            return new CachingConnectionFactory((ConnectionFactory) bean);
        }
        return bean;
    }
}

注意:在1.1.4中,由于1.2.3中不再提供的公共方法
HornetQAutoConfiguration.jmsConnectionFactory()
,因此具有灵活性。可以将HornetQAutoConfiguration子类化,并根据工厂方法通过super调用该方法,然后用CachingConnectionFactory包装结果。我看到的最简单的方法就是创建一个
BeanPostProcessor
,它检查一个bean是否是
ConnectionFactory
,然后将其包装在
CachingConnectionFactory
中,这将适用于任何JMS实现,不扩展任何特定的Spring引导类。(无论Spring启动版本如何,这都应该有效)。在定制中包装自动配置的bean确实很棘手。我认为我们可以设想一个支持
CachingConnectionFactory
的问题,或者稍微打开一点API来提供这样的支持。请创建一个问题,我打开了一个问题: