如何结合 Spring Boot HornetQAutoConfiguration 和 CachingConnectionFactory?

Posted

技术标签:

【中文标题】如何结合 Spring Boot HornetQAutoConfiguration 和 CachingConnectionFactory?【英文标题】:How to combine Spring Boot HornetQAutoConfiguration and CachingConnectionFactory? 【发布时间】:2015-07-12 20:59:53 【问题描述】:

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

在 1.1.4 下的 Spring Java 配置中,我们将 org.springframework.jms.connection.CachingConnectionFactoryorg.springframework.boot.autoconfigure.jms.hornetq.HornetQAutoConfiguration 模板化的 jmsConnectionFactory 结合起来,效果很好。

在 1.2.3 下,HornetQAutoConfiguration 已经过重做,这让我们想知道如何在不从头开始编写整个配置的情况下配置 CachingConnectionFactory 的使用。

在 Spring Boot 中使用 CachingConnectionFactory 和 HornetQ 来缓存 JMS Sessions 和 MessageProducers 的场景是否仍然有效?

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

是否应该将这个问题转化为 Spring Boot 问题?

【问题讨论】:

注意:在 1.1.4 下,由于公共方法 HornetQAutoConfiguration.jmsConnectionFactory() 在 1.2.3 下不再可用,因此具有灵活性。可以将 HornetQAutoConfiguration 子类化,并通过 super 以工厂方法的形式调用该方法,然后使用 CachingConnectionFactory 包装结果。 我看到的最简单的方法是创建一个BeanPostProcessor,它检查一个bean是否是ConnectionFactory,然后将它包装在CachingConnectionFactory中,这适用于任何JMS实现,没有扩展任何特定的 Spring Boot 类。 (无论 Spring Boot 版本如何,这都应该有效)。 在您的定制中包装一个自动配置的 bean 确实很棘手。我认为我们可以设想支持CachingConnectionFactory 或稍微开放API 以提供此类支持的问题。请创建一个问题 谢谢,我开了一个问题:github.com/spring-projects/spring-boot/issues/2956 【参考方案1】:

这个带有自己的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;
    

【讨论】:

以上是关于如何结合 Spring Boot HornetQAutoConfiguration 和 CachingConnectionFactory?的主要内容,如果未能解决你的问题,请参考以下文章

spring boot 结合啥前端框架

如何在 Spring Boot 中将 HikariCP 与两个数据源结合使用 Flyway

Spring Boot 结合 Mybatis 解决多数据源的问题

spring-boot结合mybatis-spring的一个例子

spring boot 结合Redis 实现工具类

Spring Boot2:使用Spring Boot结合Thymeleaf模板引擎使用总结