问题描述:
com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 1000, active 10at com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:1124)
问题分析:
问题:此为数据库连接池等待超时问题。服务端无法通过Druid连接池与数据库之间建立连接对象。
数据库连接池使用步骤:
声明静态数据源成员变量创建连接池对象定义公有的得到数据源的方法定义得到连接对象的方法定义关闭资源的方法具体模板案例
本问题为数据库连接超时,缘由:在JavaWeb中接口实现层在使用完数据库连接池,未关闭数据库连接池。超出数据库连接池的最大连接数目。
解决方式:
在相应的接口实现层,添加相应Druid连接池关闭代码即可。
DruidUtils.close(conn,ps);
具体案例代码:
public class LoginServiceImpl implements LoginService {@Overridepublic String findPhone(String phone) {PreparedStatement ps = null;ResultSet rs = null;Connection con = null;String sql = "select * from user where phone = " + phone;try {con = DruidUtils.getConnection();ps = con.prepareStatement(sql);rs = ps.executeQuery();while (rs.next()){String out_password = rs.getString("password");return out_password;}} catch (Exception e) {e.printStackTrace();}finally {/*** 问题却少代码处。*/DruidUtils.close(con,ps);}return null;}}
问题反思:
本人在学习数据库连接池时,存在概念理解不清晰之处。在后期实践过程中,未能正确关闭Druid数据库连接池导致问题产生。望再接下的开发道路中,应当更加脚踏实地,准确理解各类工具概念原理,并且遵循工具使用规范,不可想当然依照个人理解来操作。否则会造成不必要的工作负担。同时也应当保持理智的探索创新精神。