繁体   English   中英

关闭连接池中的数据库连接

[英]Close database connection in connection pool

我正在使用JDBC连接池与mysql服务器建立连接。

以下是我的代码段

  try {
       InitialContext initialContext = new InitialContext();
        Context context = (Context) initialContext.lookup("java:comp/env"); 
        DataSource ds = (DataSource) context.lookup("connpool");
        Connection conn =  ds.getConnection();
        //some query is executed 
    }
    catch(SQLException ex)
   {   } 
   finally {  conn.close(); }

我的怀疑:

我的疑问是,即使我正在关闭连接(conn.close()),在MySQL show processlist命令中它也会显示连接。

如果我向Servlet发送更多请求,则show processlist中的连接数也在增加,

当此连接关闭时。

为什么我怕意味着它达到连接数上限,它会显示错误。

我的连接池配置为:

          <Resource name="connpool" auth="Container" 
             type="javax.sql.DataSource" 
             maxActive="1" maxIdle="0"
             maxWait="-1"
             username="xxxxx" 
             password="xxxxx"
             driverClassName="com.mysql.jdbc.Driver"
             url="jdbc:mysql://localhost:3306/govsocial"/>

tomcat文档中 ,有些初始值与您在资源配置中设置的初始值不一致。

  • minIdle (默认为10)
  • initialSize (默认为10)

如果您查看带有上述默认值的init()方法的代码,并使用

  • maxActive = "1"
  • maxIdle = "0"

您最终将得到:

  • maxActive = "1"
  • maxIdle = "1"
  • minIdle = "1"
  • initialSize = "1"

这是一个由1个连接组成的池,该池的目的是保持一些(取决于config)对传入请求的连接处于打开状态。 调用close()只会将连接从繁忙队列传递到空闲队列。

如果您真的根本不需要池 ,则应尝试显式设置:

  • maxActive = "1"
  • maxIdle = "0"
  • minIdle = "0"
  • initialSize = "0"

请注意, maxWait = -1意味着新的连接将等待直到连接可用-没有超时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM