【问题标题】:BoneCP correct usageBoneCP 正确用法
【发布时间】:2012-03-08 19:46:44
【问题描述】:

我刚刚开始使用 BoneCP,并从作者站点提取了示例 JDBC 代码。

我有一个名为 getConnection() 的函数,它返回一个连接,这里是一个 sn-p:

    // setup the connection pool
BoneCPConfig config = new BoneCPConfig();
// Config goes here.
connectionPool = new BoneCP(config); // setup the connection pool

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

现在,我的问题: 1)当我完成使用从上述函数返回的连接时,我是否调用 connection.close() 以便将其返回到池中,或者这是否完全关闭连接?如何将连接返回到池?

2) 如何在应用程序退出时清理池?我完成后是否调用 connectionPool.shutdown() ?而且,我在某处读到需要单独关闭所有池连接?这是真的吗?

谢谢。

【问题讨论】:

    标签: java mysql jdbc connection-pooling bonecp


    【解决方案1】:

    1. 完成后始终调用connection.close() 以将连接返回到池(不会物理关闭)。

    2. 当您完全使用池并且不打算再次重新连接时,请致电 connectionPool.shutDown()

    【讨论】:

      【解决方案2】:
       Connection connection = dbPool.getConnection();
      

      从池中得到的 Connection 对象是一个包装类。即使在 Exception 中,它也会正确维护底层连接。

      即使在 Connection 相关的异常中,例如 TERMINATE_ALL_CONNECTIONS,BoneCP 池也会正确关闭所有底层连接。

      总之,BoneCP 池使缓存透明化。客户端只需要按照stand流程,

      1. 请求连接(从池中获取连接,池将决定是否重用/创建一个)
      2. 请求 PreparedStatement/CallableStatement(重用池中的对象(如果已启用)
      3. 执行语句
      4. 关闭语句,(如果启用,则将语句对象释放到池中
      5. 关闭连接,(将连接对象释放到池中

      当应用程序停止时,关闭池以释放所有缓存的连接。

      boneCP.shutdown()
      

      【讨论】:

      • 我想知道,如果我的服务器崩溃并且我必须重新启动,我如何清除由于从未调用过关闭而未释放的连接?
      • BoneCP 会妥善处理它们。明确地说,BoneCP 更像是一个代理,为您管理连接。您从中“借出”连接,只需要记住“返回”即可。所有其他连接生命周期管理繁琐的事情都将由 BoneCP 处理。
      • 这很高兴知道,但是关闭 Connection 对象仍然感觉很奇怪,这在 BoneCP 代码中看起来就像一个实际的 Connection 对象。有什么办法让我看到这个? public Connection getConnection() 抛出 SQLException {//编译代码}
      猜你喜欢
      • 2012-10-29
      • 2015-05-24
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      • 2015-01-29
      • 1970-01-01
      • 2012-08-01
      • 2011-07-25
      相关资源
      最近更新 更多