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

Java 关闭连接池中的数据库连接,java,mysql,servlets,tomcat7,connection-pooling,Java,Mysql,Servlets,Tomcat7,Connection Pooling,我正在使用JDBC连接池与mysql服务器建立连接 下面是我的代码片段 try { InitialContext initialContext = new InitialContext(); Context context = (Context) initialContext.lookup("java:comp/env"); DataSource ds = (DataSource) context.lookup("connpool");

我正在使用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(); }
我的疑问是:

我的怀疑是,我甚至在MySQL中关闭了连接(conn.close()) 显示进程列表命令它显示连接

如果我向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"/>

从中,有些初始值的设置与资源配置中的设置不一致

  • minIdle
    (默认值为10)
  • initialSize
    (默认值为10)
如果您有,则使用上述默认值和配置

  • maxActive=“1”
  • maxIdle=“0”
您最终将得到:

  • maxActive=“1”
  • maxIdle=“1”
  • minIdle=“1”
  • initialSize=“1”
这是一个由1个连接组成的池,池的目的是为传入的请求保持一些(取决于配置)连接处于打开状态。调用
close()
只会将连接从繁忙队列传递到空闲队列

如果您真的想根本不使用池,则应尝试显式设置:

  • maxActive=“1”
  • maxIdle=“0”
  • minIdle=“0”
  • initialSize=“0”

请注意,
maxWait=-1
意味着新连接将一直等待,直到连接可用,而不会超时

检查数据源的配置。可能它正在打开一个新连接,直到达到允许的最大连接数,然后它将开始重用它们。当您发出
conn.close
时,连接池可能不会实际关闭物理数据库连接,而只是将其释放出来供另一个
getConnection
@luigimendoza I have set maxActive=“1”maxIdle=“0”maxWait=“-1”您可以发布连接池的完整配置吗?你在使用什么库?@JohnR我已经在帖子中添加了资源配置。