HikariPool-1-Connectionisnotavailable,request。。。

更新时间:2023-05-31 23:37:17 阅读: 评论:0

HikariPool-1-Connectionisnotavailable,request。。。
well
线下Tomcat出现故障,查看⽇志报错:
HikariPool-1 - Connection is not available, request timed out after 30000ms
最后调查的问题是:
标点符号某个Service中有个⽅法使⽤ httpclient 调⽤了⼀个外部接⼝,⽽当时这个外部接⼝服务出现故障,导致httpclient调⽤卡死了,⼀直没有响应,因为在Service⽅法中,也就是在数据库事务中,httpclient调⽤卡死导致数据库连接⼀直⽆法释放,卡死的httpclient调⽤不断的增⼤,数据库连接不断的被占⽤并且⽆法释放,最终达到了最⼤值:
bbc是什么意思
<!-- 连接池中允许的最⼤连接数。缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count) -->杜甫简介英文>moderate
<property name="maximumPoolSize" value="15" />
其他功能需要访问数据库时,就报错:HikariPool-1 - Connection is not available, request timed out after 30000ms
这⾥问题的关键在于不能在事务中调⽤外部接⼝,不能在事务中有耗时的操作等存在。这样会导致事务变成⼤事务,长时间占⽤数据库连接、有可能还导致事务长时间持有相关锁从⽽导致死锁。
最佳的解决办法,⾃然是把 httpclient 外部调⽤移到事务外⾯。实时证明,移到事务外⾯就恢复正常了。
dmagazine另外,httpclient 调⽤应该加上超时现在,⽐如超过2秒没有返回,就断开:
泰安翻译公司URL url = new URL(urlAddress);
differentfrom
URLConnection conn = url.openConnection();
conn.tConnectTimeout(2000);  // 2秒没有连上,则超时
conn.tReadTimeout(2000);  // 2秒没有响应,则超时
collap什么意思
这样也可以缓解问题。但是最好的⽅法还是把外部调⽤移到事务外⾯!
这⾥有个原理需要弄清楚:
rvice⽅法⾥⾯就是⼀个 httpclient 调⽤,没有查询数据库,为什么还是会占⽤数据库连接呢
缺省
原因是数据库事务肯定是需要基于数据库连接的!就⾏我们在mysql客户端⾥⾯执⾏:begin transaction 命令⼀样,先得连上mysql 。没有连上mysql,⽆法开启事务。
这也是为什么在 rvice⽅法⾥⾯没有查询mysql,但是还是会占⽤⼀个数据库连接的原因所在。

本文发布于:2023-05-31 23:37:17,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/129768.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:事务   数据库   导致   没有   需要
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图