1. 程式人生 > 其它 >Failed to obtain JDBC Connection問題排查

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