2015-05-03 16 views
1

從春天引導遷移到1.1.4 1.2.3我們下面的問題:如何結合Spring Boot HornetQAutoConfiguration和CachingConnectionFactory?

在我們的Spring Java配置1.1.4下,我們結合org.springframework.jms.connection.CachingConnectionFactoryorg.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問題?

+0

注意:根據1.1.4,由於公共方法HornetQAutoConfiguration.jmsConnectionFactory()在1.2.3下不再提供靈活性。可以繼承HornetQAutoConfiguration並通過超級方法調用該方法,然後用CachingConnectionFactory包裝結果。 – sourcekick

+1

我看到的最簡單的方法是創建一個'BeanPostProcessor',它檢查一個Bean是否是'ConnectionFactory',然後將它封裝在'CachingConnectionFactory'中,這可以用於任何JMS實現,而不會擴展任何特定的Spring Boot類。 (這應該工作,不管Spring Boot版本)。 –

+0

在自定義中包裝一個自動配置的bean確實很棘手。我想我們可以設想一個支持'CachingConnectionFactory'的問題或者打開API來提供這樣的支持。請創建一個問題 –

回答

0

此解決方案與自己的BeanPostProcessor爲我工作。您可以在application.properties中啓用ConnectionFactory緩存,並使用屬性jms.useCachingConnectionFactory = true

@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; 
    } 
}