Druid数据库连接池超时问题com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 1000, active 10

问题描述:

com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 1000, active 10
	at com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:1124)

问题分析:

问题: 此为数据库连接池等待超时问题。服务端无法通过Druid连接池与数据库之间建立连接对象。
数据库连接池使用步骤:

  1. 声明静态数据源成员变量
  2. 创建连接池对象
  3. 定义公有的得到数据源的方法
  4. 定义得到连接对象的方法
  5. 定义关闭资源的方法
  6. 具体模板案例

本问题为数据库连接超时,缘由:在JavaWeb中接口实现层在使用完数据库连接池,未关闭数据库连接池。 超出数据库连接池的最大连接数目。

解决方式:

在相应的接口实现层,添加相应Druid连接池关闭代码即可。

DruidUtils.close(conn,ps);

具体案例代码:

public class LoginServiceImpl implements LoginService {

    @Override
    public 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数据库连接池导致问题产生。望再接下的开发道路中,应当更加脚踏实地,准确理解各类工具概念原理并且遵循工具使用规范,不可想当然依照个人理解来操作。否则会造成不必要的工作负担。同时也应当保持理智的探索创新精神。


版权声明:本文为weixin_45111030原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。