Failed to obtain JDBC Connection問題排查


背景:

看到日志報錯信息如下:

## The error may exist in URL [jar:file:/app.jar!/BOOT-INF/classes!/mapper/BaTaskExecMapper.xml]
### The error may involve com.zatech.aquarius.business.dao.BaTaskExecMapper.selectByCondition
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection;
nested exception is com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 5000, active 50, maxActive 50, creating 0,
runningSqlCount 50 : select * from ba_policy_query_v2 WHERE is_deleted = 'N' and tenant_id = ? and policy_id = ?

首先查看看對應的業務代碼,發現有async的使用,而這是一個定時任務會掃描出大量的數據,

然后看數據庫配置,發現最大的數據庫連接數量是50,跟報錯信息吻合,

接着又看了@async的源碼,又發現代碼中對async配置利用接口AsyncConfigurer進行了重寫,配置的最大數量是500.

這就很明顯了,沒有很好的處理async線程池的配置與數據庫連接池的配置

 

處理方式:調整async配置,讓他的最大連接數小於數據庫連接池的數量

 參考鏈接:

https://www.cnblogs.com/dennyzhangdd/p/9026303.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM