先说问题背景:程序有多线程调用,有大量的数据库交互
遇到的问题:程序运行一段时间之后hung 住了,没有异常抛出,也不继续执行
因为有多线程调用,因此无法快速准确的定位问题:是线程问题还是其他代码逻辑问题
后来发现是数据库连接的问题:由于有段代码数据库连接没有释放,导致数据库连接池的连接被占满,后续的申请持续等待
定位问题过程:
(1) 加上了数据库连接池超时等待时间的设置 -- 如果超时,则抛出异常,可以定位是数据库连接池的问题
(2) 在log 中打印当前active 的连接数 (BasicDataSource 中的getNumActive()