Spring - 缓存 Destination JndiObjectFactoryBean 时,它是否保持与 JMS 代理的任何连接打开?
Spring - When a Destination JndiObjectFactoryBean is cached, does it keep any connection open to the JMS broker?
我们通过 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 确认对象存在并将其缓存以备后用。这个 Destination 的缓存是否也涉及到我们的代理创建的持久连接?还是仅在实例化我们的 CachingConnectionFactory 时才物理创建连接?
当您在 CachingConnectionFactory
实例上第一次调用 createConnection()
时创建(唯一且共享的)连接,并在调用 destroy()
或 [=13= 时释放] 如合同所述(CachingConnectionFactory
继承自 SingleConnectionFactory
):
A JMS ConnectionFactory adapter that returns the same Connection from all createConnection() calls, and ignores calls to Connection.close()
我们通过 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 确认对象存在并将其缓存以备后用。这个 Destination 的缓存是否也涉及到我们的代理创建的持久连接?还是仅在实例化我们的 CachingConnectionFactory 时才物理创建连接?
当您在 CachingConnectionFactory
实例上第一次调用 createConnection()
时创建(唯一且共享的)连接,并在调用 destroy()
或 [=13= 时释放] 如合同所述(CachingConnectionFactory
继承自 SingleConnectionFactory
):
A JMS ConnectionFactory adapter that returns the same Connection from all createConnection() calls, and ignores calls to Connection.close()