在Spring Boot JMS CachingConnectionFactory中关闭会话

时间:2017-12-07 13:04:46

标签: spring-boot jms spring-jms

我的JMS配置如下( Spring boot 1.3.8 );

    @Configuration
    @EnableJms
    public class JmsConfig {

    @Autowired
    private AppProperties properties;

    @Bean
    TopicConnectionFactory topicConnectionFactory() throws JMSException {
        return new TopicConnectionFactory(properties.getBrokerURL(), properties.getBrokerUserName(),
                properties.getBrokerPassword());
    }

    @Bean
    CachingConnectionFactory connectionFactory() throws JMSException {
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory(topicConnectionFactory());
        connectionFactory.setSessionCacheSize(50);
        return connectionFactory;
    }

    @Bean
    JmsTemplate jmsTemplate() throws JMSException {
        JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory());
        jmsTemplate.setPubSubDomain(Boolean.TRUE);
        return jmsTemplate;
    }

    @Bean
    DefaultJmsListenerContainerFactory defaultContainerFactory() throws JMSException {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory());
        factory.setPubSubDomain(Boolean.TRUE);
        factory.setRecoveryInterval(30 * 1000L);
        return factory;
    }
}

这应该可以正常工作。但我担心写在CachingConnectionFactory

的文件上的是什么

特别是这些部分;

  

注意:此ConnectionFactory要求显式关闭从其共享Connection

获取的所有Sessions      

另请注意,从缓存的Session获取的MessageConsumers不会关闭,直到Session最终从池中删除。在某些情况下,这可能会导致语义副作用。

我认为框架处理了结束会话和连接部分?如果没有;我应该如何正确关闭它们?

或者我错过了什么?

感谢任何帮助:)

F.Y.I:我使用SonicMQ作为经纪人

1 个答案:

答案 0 :(得分:1)

是的,JmsTemplate将关闭会话; javadocs指的是框架之外的直接使用。