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