spring 集成MongoDB错误Interrupted acquiring a permit to retrieve an item from the pool

在使用MongoDB存储监控数据时,遇到Interrupted acquiring a permit错误,意味着连接池出现问题。该问题可能由主线程提前结束导致,而线程池中的任务仍在执行,使得MongoDB连接池被提前关闭。解决方案包括检查主线程是否等待线程池任务完成,特别是在使用多线程和线程池时要注意避免此类问题。
摘要由CSDN通过智能技术生成

使用MongoDB存储监控相关信息,偶尔会出现下面这个错误,无法从连接池获取MongoDB的链接信息,从错误提示上就是连接池不能使用了,但是有时候会成功,有时候会失败,这里记录一下失败的原因。

参考链接

mongoDB 常见三种异常解析 (附配置)
Exception: Interrupted acquiring a permit to retrieve an item from the pool

看了上面两个文章之后,就想到了可能是应用程序已经结束了,但是还有线程在使用MongoDB的连接,因此检查程序是否结束了,还有其他应用在使用MongoDB连接池。

解决思路

  • 如果运行的main方式或者单元测试之类的,检查方法执行完之后是否还有其他任务在执行,尤其是使用多线程的时候需要检查,如果不好查找可以在主线程睡眠几十秒看看效果。

我的问题

我的问题主要是使用线程池去执行任务,线程池里面的任务还没执行完,主线程已经结束了,因为主线程把任务放到线程池之后就结束了,并没有等线程池执行完,所以主线程结束了,线程池还在执行,主线程执行了之后spring管理的bean也就都销毁了。

异常信息

com.mongodb.MongoInterruptedException: Interrupted acquiring a permit to retrieve an item from the pool 
	at com.mongodb.internal.connection.ConcurrentPool.acquirePermit(ConcurrentPool.java:203) ~[mongo-java-driver-3.11.2.jar:na]
	at com.mongodb.internal.connection.ConcurrentPool.get(ConcurrentPool.java:140) ~[mongo-java-dri
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值