【问题标题】:How to combine Spring Boot HornetQAutoConfiguration and CachingConnectionFactory?如何结合 Spring Boot HornetQAutoConfiguration 和 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

标签: jms spring-boot hornetq spring-jms


【解决方案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;
    }
}

【讨论】:

    猜你喜欢
    • 2019-09-20
    • 1970-01-01
    • 2021-08-17
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    相关资源
    最近更新 更多