Spring JMS:为什么始终使用started = false创建CachingConnectionFactory?

时间:2016-05-21 16:54:09

标签: spring activemq jmx spring-jmx

我有一个示例应用程序演示使用:

  • Spring Framework 4.2.5
  • ActiveMQ 5.13.3

我有以下内容:

@Bean(name="connectionFactory")
public CachingConnectionFactory cachingConnectionFactory(ActiveMQConnectionFactory selectedActiveMQConnectionFactory) throws JMSException{
    CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
    cachingConnectionFactory.setClientId("ManolitoActiveMQ");
    cachingConnectionFactory.setTargetConnectionFactory(selectedActiveMQConnectionFactory);
    cachingConnectionFactory.setSessionCacheSize(10);
    cachingConnectionFactory.createConnection().start();
    return cachingConnectionFactory;
}

当我使用cachingConnectionFactory.createConnection().start();行时 我可以看到,当我的应用程序启动时,它会显示:

  

3370 [main] INFO o.s.j.c.CachingConnectionFactory - 已建立的共享JMS连接:   ActiveMQConnection {id = ID:sometext,clientId = ManolitoActiveMQ,started = false}

有意识地期待应用启动时的消息并阅读Established shared JMS Connection,但为什么显示started=false?我认为应该是真的。

如果我评论cachingConnectionFactory.createConnection().start();并启动应用,则上面显示的消息不会出现,好的,是预期的。但是当我开始发送消息时,我会在JMX之后再次看到

  

3370 [main] INFO o.s.j.c.CachingConnectionFactory - 已建立的共享JMS连接:   ActiveMQConnection {id = ID:sometext,clientId = ManolitoActiveMQ,started = false}

好的预计,但started=false再次出现

在某些方面会让人感到困惑,因为cachingConnectionFactory.createConnection().start()行以start()结尾,用于连接

  1. 因此,实际上为什么总是出现started=false
  2. started属性与true一起显示的时间或方式

1 个答案:

答案 0 :(得分:2)

请注意started=false位于连接的toString()中 - 它与连接工厂无关;它与刚创建的连接有关。

logger.info("Established shared JMS Connection: " + this.connection);

如果需要,连接本身将在稍后启动。