Spring boot 关闭Spring Boot JMS CachingConnectionFactory中的会话
我的JMS配置如下(Spring boot 1.3.8) 这应该行得通。但我担心的是医生上写了什么 特别是这些部分, 注意:此ConnectionFactory要求显式关闭从其共享连接获得的所有会话 还请注意,从缓存会话获得的MessageConsumers在会话最终从池中删除之前不会关闭。在某些情况下,这可能会导致语义上的副作用 我认为框架处理了结束会话和连接部分?如果没有,;我应该如何正确地关闭它们 或者我错过了什么 感谢您的帮助:)Spring boot 关闭Spring Boot JMS CachingConnectionFactory中的会话,spring-boot,jms,spring-jms,Spring Boot,Jms,Spring Jms,我的JMS配置如下(Spring boot 1.3.8) 这应该行得通。但我担心的是医生上写了什么 特别是这些部分, 注意:此ConnectionFactory要求显式关闭从其共享连接获得的所有会话 还请注意,从缓存会话获得的MessageConsumers在会话最终从池中删除之前不会关闭。在某些情况下,这可能会导致语义上的副作用 我认为框架处理了结束会话和连接部分?如果没有,;我应该如何正确地关闭它们 或者我错过了什么 感谢您的帮助:) F.Y.I:我使用SonicMQ作为代理是的,JmsTe
F.Y.I:我使用SonicMQ作为代理是的,
JmsTemplate将关闭会话;javadocs指的是在框架之外直接使用。是的,JmsTemplate
将关闭会话;javadocs指的是框架外的直接使用。你说的框架外直接使用是什么意思?我的意思是框架组件(JmsTemplate
,侦听器容器)将在适当的时候可靠地关闭会话。如果您直接在共享连接上创建自己的会话,您有责任关闭它们。您所说的在框架之外直接使用是什么意思?我的意思是框架组件(JmsTemplate
,侦听器容器)将在适当的时候可靠地关闭会话。如果您直接在共享连接上创建自己的会话,您有责任关闭它们。
@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;
}
}