首页 > 解决方案 > Spring - 当一个 Destination JndiObjectFactoryBean 被缓存时,它是否保持与 ​​JMS 代理的任何连接?

问题描述

我们通过 JNDI 查找配置我们的 JMS 目的地,如下所示:

@Bean
JndiObjectFactoryBean myTopic(@Value("${topic}") String topic,
                              JndiTemplate jndiTemplate) {

    JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
    jndiObjectFactoryBean.setJndiTemplate(jndiTemplate);
    jndiObjectFactoryBean.setJndiName(topic);

    return jndiObjectFactoryBean;
}

在初始化这个 bean 时,Spring 确认对象存在并缓存它以供以后使用。这个目的地的缓存是否也涉及到我们的代理创建持久连接?还是仅在实例化 CachingConnectionFactory 时才物理创建连接?

标签: springjmsjndisolace

解决方案


当您createConnection()在实例上第一次调用时创建(唯一和共享的)连接,并在调用或根据合同(继承自)所述时CachingConnectionFactory释放:destroy()resetConnection()CachingConnectionFactorySingleConnectionFactory

一个 JMS ConnectionFactory 适配器,它从所有 createConnection() 调用返回相同的 Connection,并忽略对 Connection.close() 的调用


推荐阅读