背景:
看到日志報錯信息如下:
## 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