2015-05-03 8 views
1

Переход от Spring ботинке 1.1.4 до 1.2.3 мы следующий вопрос:Как совместить Spring Boot HornetQAutoConfiguration и CachingConnectionFactory?

В нашей конфигурации Spring Java под 1.1.4 мы объединили org.springframework.jms.connection.CachingConnectionFactory с jmsConnectionFactory шаблонного по org.springframework.boot.autoconfigure.jms.hornetq.HornetQAutoConfiguration и он работал отлично.

В разделе 1.2.3 HornetQAutoConfiguration сильно переработано, что теперь заставляет нас задаться вопросом, как настроить использование CachingConnectionFactory без написания всей конфигурации с нуля.

Является ли сценарий по-прежнему действительным для использования CachingConnectionFactory с HornetQ в Spring Boot для кэширования JMS Session s и MessageProducer s?

Если да, как можно настроить CachingConnectionFactory под Spring Boot 1.2.3?

Должен ли этот вопрос быть преобразован в проблему с пружинной загрузкой?

+0

Примечание: в соответствии с 1.1.4 существует гибкость из-за общедоступного метода 'HornetQAutoConfiguration.jmsConnectionFactory()', который больше не доступен в соответствии с 1.2.3. Можно было подклассифицировать HornetQAutoConfiguration и вызвать этот метод через super с точки зрения заводского метода, а затем обернуть результат с помощью CachingConnectionFactory. – sourcekick

+1

Самый простой способ, который я вижу, это просто создать «BeanPostProcessor», который проверяет, является ли bean-компонентом 'ConnectionFactory', а затем обертывает его в' CachingConnectionFactory', это будет работать с любой реализацией JMS, не расширяя классы Spring Boot. (Это должно работать независимо от версии Spring Boot). –

+0

Это действительно сложно обернуть автоматически настроенный компонент в ваших настройках. Я думаю, что мы можем представить себе проблему поддержки 'CachingConnectionFactory' или открытия API, чтобы предложить такую ​​поддержку. Пожалуйста, создайте проблему –

ответ

0

Это решение с собственным BeanPostProcessor работало для меня. Вы можете включить кеширование ConnectionFactory с свойством jms.useCachingConnectionFactory = true в вашем приложении application.properties.

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

 Смежные вопросы

  • Нет связанных вопросов^_^