如何结合 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.CachingConnectionFactory
与 org.springframework.boot.autoconfigure.jms.hornetq.HornetQAutoConfiguration
模板化的 jmsConnectionFactory 结合起来,效果很好。
在 1.2.3 下,HornetQAutoConfiguration 已经过重做,这让我们想知道如何在不从头开始编写整个配置的情况下配置 CachingConnectionFactory 的使用。
在 Spring Boot 中使用 CachingConnectionFactory 和 HornetQ 来缓存 JMS Session
s 和 MessageProducer
s 的场景是否仍然有效?
如果答案是肯定的,那么在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 中将 HikariCP 与两个数据源结合使用 Flyway
Spring Boot 结合 Mybatis 解决多数据源的问题