关闭 REST 服务中的连接池是不是会首先破坏连接池的目的?

Posted

技术标签:

【中文标题】关闭 REST 服务中的连接池是不是会首先破坏连接池的目的?【英文标题】:Does closing a connection pool in a REST service defeat the purpose of a connection pool in the first place?关闭 REST 服务中的连接池是否会首先破坏连接池的目的? 【发布时间】:2012-06-07 23:28:14 【问题描述】:

我正在使用 BoneCP 连接池 jdbc 连接到我的 mysql 数据库。我在我的 REST 应用程序中使用了 bonecp 示例。

如果每个 REST 请求都打开和关闭连接池,这不是首先破坏了连接池吗?

代码如下:

 public class ExampleJDBC 

/** Start test
 * @param args none expected.
 */
public static void main(String[] args) 
    BoneCP connectionPool = null;
    Connection connection = null;

    try 
        // load the database driver (make sure this is in your classpath!)
        Class.forName("org.hsqldb.jdbcDriver");
     catch (Exception e) 
        e.printStackTrace();
        return;
    

    try 
        // setup the connection pool
        BoneCPConfig config = new BoneCPConfig();
        config.setJdbcUrl("jdbc:hsqldb:mem:test"); // jdbc url specific to your database, eg jdbc:mysql://127.0.0.1/yourdb
        config.setUsername("sa"); 
        config.setPassword("");
        config.setMinConnectionsPerPartition(5);
        config.setMaxConnectionsPerPartition(10);
        config.setPartitionCount(1);
        connectionPool = new BoneCP(config); // setup the connection pool

        connection = connectionPool.getConnection(); // fetch a connection

        if (connection != null)
            System.out.println("Connection successful!");
            Statement stmt = connection.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT 1 FROM      INFORMATION_SCHEMA.SYSTEM_USERS"); // do something with the connection.
            while(rs.next())
                System.out.println(rs.getString(1)); // should print out "1"'
            
        
        connectionPool.shutdown(); // shutdown connection pool.
     catch (SQLException e) 
        e.printStackTrace();
     finally 
        if (connection != null) 
            try 
                connection.close();
             catch (SQLException e) 
                e.printStackTrace();
            
        
    
 
 

【问题讨论】:

【参考方案1】:

是的,它会破坏在应用程序的(典型)生命周期中多次打开或关闭连接池的目的。您应该每次都从预先建立的池中获取连接。

【讨论】:

以上是关于关闭 REST 服务中的连接池是不是会首先破坏连接池的目的?的主要内容,如果未能解决你的问题,请参考以下文章

golang 连接、操作完mysql, 对mysql的连接会自动关闭,还是必须要手动关闭?

作为 Gopher 你一定要懂的连接池

解决Mysql连接池被关闭 ,hibernate尝试连接不能连接的问题。 (默认mysql连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池。系统发布第二天访问链接关闭问

大白话聊懂Java中的连接池,用包装模式实现标准的DataSource数据源连接池

总结httpclient资源释放和连接复用

连接池(理论上应该是任意连接池) spring方法切入 mybatis redis等待请求 用了mysql连接的方法阻塞超过8小时导致mysql关闭连接 应用复活后用了已关闭连接而异常