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

时间:2015-04-20 15:30:30

标签: 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");
        Connection conn =  ds.getConnection();
        //some query is executed 
    }
    catch(SQLException ex)
   {   } 
   finally {  conn.close(); }

我怀疑:

我怀疑这是在MySQL中连接关闭(conn.close()) 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"/>

1 个答案:

答案 0 :(得分:0)

tomcat documentation开始,有些初始值未与您在资源配置中设置的内容一致。

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

如果您有look at the code for init() method,则使用上述默认值并使用

进行配置
  • maxActive = "1"
  • maxIdle = "0"

你最终会得到:

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

这是一个1连接池,池的目的是保持一些(取决于配置)连接为传入请求打开。调用close()只会将连接从 busy 队列传递到 idle

如果你真的想要没有游泳池,你应该尝试明确设置:

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

请注意maxWait = -1表示新连接将等待连接可用 - 没有超时。