整合activeMQ,配置连接池,启动项目报错,JmsMessagingTemplate无法注入

//使用springboot2.0+及以下版本时候,maven配置依赖是:
<dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-pool</artifactId>
</dependency>
//使用springboot2.1+时候,maven配置依赖是
<dependency><groupId>org.messaginghub</groupId><artifactId>pooled-jms</artifactId>
</dependency>

在springboot的2.0版本以下 的连接工厂

@Configuration
@ConditionalOnMissingBean(ConnectionFactory.class)
class ActiveMQConnectionFactoryConfiguration {@Bean@ConditionalOnProperty(prefix = "spring.activemq.pool", name = "enabled", havingValue = "false", matchIfMissing = true)public ActiveMQConnectionFactory jmsConnectionFactory(ActiveMQProperties properties,ObjectProvider<List<ActiveMQConnectionFactoryCustomizer>> factoryCustomizers) {return new ActiveMQConnectionFactoryFactory(properties,factoryCustomizers.getIfAvailable()).createConnectionFactory(ActiveMQConnectionFactory.class);}@Configuration@ConditionalOnClass(PooledConnectionFactory.class)static class PooledConnectionFactoryConfiguration {@Bean(destroyMethod = "stop")@ConditionalOnProperty(prefix = "spring.activemq.pool", name = "enabled", havingValue = "true", matchIfMissing = false)public PooledConnectionFactory pooledJmsConnectionFactory(ActiveMQProperties properties,ObjectProvider<List<ActiveMQConnectionFactoryCustomizer>> factoryCustomizers) {PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory(new ActiveMQConnectionFactoryFactory(properties,factoryCustomizers.getIfAvailable()).createConnectionFactory(ActiveMQConnectionFactory.class));ActiveMQProperties.Pool pool = properties.getPool();pooledConnectionFactory.setBlockIfSessionPoolIsFull(pool.isBlockIfFull());if (pool.getBlockIfFullTimeout() != null) {pooledConnectionFactory.setBlockIfSessionPoolIsFullTimeout(pool.getBlockIfFullTimeout().toMillis());}pooledConnectionFactory.setCreateConnectionOnStartup(pool.isCreateConnectionOnStartup());if (pool.getExpiryTimeout() != null) {pooledConnectionFactory.setExpiryTimeout(pool.getExpiryTimeout().toMillis());}if (pool.getIdleTimeout() != null) {pooledConnectionFactory.setIdleTimeout((int) pool.getIdleTimeout().toMillis());}pooledConnectionFactory.setMaxConnections(pool.getMaxConnections());pooledConnectionFactory.setMaximumActiveSessionPerConnection(pool.getMaximumActiveSessionPerConnection());pooledConnectionFactory.setReconnectOnException(pool.isReconnectOnException());if (pool.getTimeBetweenExpirationCheck() != null) {pooledConnectionFactory.setTimeBetweenExpirationCheckMillis(pool.getTimeBetweenExpirationCheck().toMillis());}pooledConnectionFactory.setUseAnonymousProducers(pool.isUseAnonymousProducers());return pooledConnectionFactory;}}}

springboot2.0以上的版本

@Configuration
@ConditionalOnMissingBean(ConnectionFactory.class)
class ActiveMQConnectionFactoryConfiguration {@Configuration@ConditionalOnClass(CachingConnectionFactory.class)@ConditionalOnProperty(prefix = "spring.activemq.pool", name = "enabled", havingValue = "false", matchIfMissing = true)static class SimpleConnectionFactoryConfiguration {private final JmsProperties jmsProperties;private final ActiveMQProperties properties;private final List<ActiveMQConnectionFactoryCustomizer> connectionFactoryCustomizers;SimpleConnectionFactoryConfiguration(JmsProperties jmsProperties,ActiveMQProperties properties,ObjectProvider<ActiveMQConnectionFactoryCustomizer> connectionFactoryCustomizers) {this.jmsProperties = jmsProperties;this.properties = properties;this.connectionFactoryCustomizers = connectionFactoryCustomizers.orderedStream().collect(Collectors.toList());}@Bean@ConditionalOnProperty(prefix = "spring.jms.cache", name = "enabled", havingValue = "true", matchIfMissing = true)public CachingConnectionFactory cachingJmsConnectionFactory() {JmsProperties.Cache cacheProperties = this.jmsProperties.getCache();CachingConnectionFactory connectionFactory = new CachingConnectionFactory(createConnectionFactory());connectionFactory.setCacheConsumers(cacheProperties.isConsumers());connectionFactory.setCacheProducers(cacheProperties.isProducers());connectionFactory.setSessionCacheSize(cacheProperties.getSessionCacheSize());return connectionFactory;}@Bean@ConditionalOnProperty(prefix = "spring.jms.cache", name = "enabled", havingValue = "false")public ActiveMQConnectionFactory jmsConnectionFactory() {return createConnectionFactory();}private ActiveMQConnectionFactory createConnectionFactory() {return new ActiveMQConnectionFactoryFactory(this.properties,this.connectionFactoryCustomizers).createConnectionFactory(ActiveMQConnectionFactory.class);}}@Configuration@ConditionalOnClass({ JmsPoolConnectionFactory.class, PooledObject.class })static class PooledConnectionFactoryConfiguration {@Bean(destroyMethod = "stop")@ConditionalOnProperty(prefix = "spring.activemq.pool", name = "enabled", havingValue = "true", matchIfMissing = false)public JmsPoolConnectionFactory pooledJmsConnectionFactory(ActiveMQProperties properties,ObjectProvider<ActiveMQConnectionFactoryCustomizer> factoryCustomizers) {ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactoryFactory(properties,factoryCustomizers.orderedStream().collect(Collectors.toList())).createConnectionFactory(ActiveMQConnectionFactory.class);return new JmsPoolConnectionFactoryFactory(properties.getPool()).createPooledConnectionFactory(connectionFactory);}}}

很明显我们看的出来,2.1和2.0以下版本使用连接池时候的连接池对象不一样:

2.0+以下版本使用的是PooledConnectionFactory,它存在于org.apache.activemq.pool.PooledConnectionFactory
2.1+版本使用的是JmsPoolConnectionFactory,它存在于org.messaginghub.pooled.jms.JmsPoolConnectionFactory
由此我们就明白了为什么更换连接池依赖就ok,因为JmsMessagingTemplate本身依赖连接工厂,启用连接池后就会依赖连接池工厂,因为版本的原因,如果没有正确的引入连接池依赖,那么必定会出现文章一开头说的,项目启动报错:JmsMessagingTemplate无法注入

ActiveMq-关于Spring集成ActiveMq的连接池报错相关推荐

  1. 阿里连接池报错:Failed to configure a DataSource ‘url‘ attribute is not specified and no embedd

    阿里连接池报错:Failed to configure a DataSource: 'url' attribute is not specified and no embedd 明明已经配置数据库连接 ...

  2. Druid连接池报错:org.postgresql.util.PSQLException: FATAL: too many connections for role “*********“

    一 错误描述 1 负责的BI中的数据数据可视化项目一直运行的比较稳定,突然早上用户反馈,报表查询非常慢,非常卡,而且有些网页直接打不开(单体应用,没有降级和熔断). 2 没一会CPU就报警了,CPU使 ...

  3. Druid 连接池 报错 com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

    场景赘述 早晨查看项目前一天的实际运行日志,发现了 一个Springboot项目中的druid 连接池和 mysql 产生了异常信息,重连暂并未对系统产生影响 下面是具体报错信息: com.mysql ...

  4. Druid连接池 报错:abandon connection原因分析

    问题现象: 使用Druid的数据库连接池,在进行一个查询SQL的时候,抛出了异常: [2017-10-20 01:40:59.269 ERROR com.alibaba.druid.pool.Drui ...

  5. 详解Jedis连接池报错处理

    在使用Jedis连接池模式下,比较常见的报错如下: redis.clients.jedis.exceptions.JedisConnectionException:Could not get a re ...

  6. spingboot使用redis连接池报错

    配置如下,增加了连接池相关 redis:host: localhostport: 6379database: 7lettuce:pool:max-active: 20max-idle: 20max-w ...

  7. hibernate4配置c3p0连接池报错

    在hibernate的xml文件中配置c3p0连接池时,运行报错: java.lang.ClassNotFoundException: Could not load requested class : ...

  8. c3p0连接池报错 A client timed out while waiting

    今天在看c3p0连接池的时候,因为连接数据库疯狂报错 com.mchange.v2.resourcepool.TimeoutException: A client timed out while wa ...

  9. mybatis mysql merge_使用Mybatis和druid连接池报错 merge sql error, dbType mysql, sql

    在项目中用mybatis查询的时候遇到一个这样的问题,抛错详情如下: merge sql error, dbType mysql, sql : select r.id from role r inne ...

最新文章

  1. ATS 5.3.0命令行工具traffic_via
  2. C Primer Plus 第6章 C控制语句 6.16 编程练习及答案
  3. Eclipse 无限编译Invoking 'Maven Project Builder'导致卡主
  4. java中堆栈的基本操作_玩儿转队列和栈的基本操作及其应用:Java 版
  5. 前端笔记 | HTML基础
  6. sql关联查询子表的第一条_SQLAlchemy(8)惰性查询
  7. 图片旋转,拖拽,缩放,删除一体
  8. 对象行为型 - 模版方法模式
  9. 【图像处理】H.264开源解码器评测
  10. 、谷歌离线地图开发教程
  11. php使用p12证书调用第三方接口
  12. 移动平均法(Moving average,MA) 指数平滑法(Exponential Smoothing,ES)
  13. [源码和报告分享]基于Java的局域网聊天工具
  14. 基于STM32的智能家居控制系统设计
  15. mysql数据库是什么语言_mysql是一种程序设计语言吗?
  16. 微信小程序构建新闻列表
  17. html盒子里的图片居中,文本在盒子中水平、垂直居中(图片与文本居中)、多行文本垂直居中...
  18. glibc 知:手册08:消息翻译
  19. android 屏蔽系统输入法自定义输入法的详解
  20. PyQt+moviepy音视频剪辑实战2:实现一个剪裁视频文件精华内容留存工具

热门文章

  1. MIPI LCD调试总结
  2. PCIe系列专题之七:PCIe热插拔
  3. 使用cesiumJS追踪卫星轨道
  4. 精心整理全网最全Tomcat面试专题及答案,tomcat面试看这篇就够了!
  5. mysql constraint primary key_一篇文章带你彻底了解MySQL各种约束
  6. 春天到了,携程能否春暖花开?
  7. Vue 打包后报错 Uncaught TypeError: Cannot redefine property: $router
  8. 三星Galaxy Watch5评测 三星Galaxy Watch5功能介绍
  9. LTO(Link Time Optimization)优化
  10. 【C语言】数据的存储——M,E