Java 连接池

Posted

技术标签:

【中文标题】Java 连接池【英文标题】:Java Connection Pooling 【发布时间】:2013-04-08 09:07:18 【问题描述】:

我搜索了连接池并阅读了它。如果我理解正确的话,连接池就像打开连接的集合。如果建立或创建了连接,则应将其添加到连接池中,如果该连接已关闭,则应将其从连接池中删除;当它打开时,我可以一次又一次地使用它。

在阅读这些关于连接池的教程和解释时,我有一些问题:

    连接池是否只能在特定计算机上使用?喜欢电脑A 无法与 ComputerB 共享其连接池?

    connection.close() 应该放在哪里?

仅在选择/加载记录时使用连接是否正确?在我得到返回的记录/数据后,我在finally 语句处关闭了连接。与添加、编辑和删除记录相同。在处理过程中,我放置了一个进度条,因此用户必须等待它完成并再次执行某些过程,这意味着我一次只会打开一个连接。

感谢您的解释。 :)

【问题讨论】:

【参考方案1】:

注意:我假设我们谈论的是java.sql.Connection 接口。

连接池是否只能在特定计算机上使用?像 ComputerA 不能与 ComputerB 共享它的连接池?

正在运行的应用程序和数据库之间存在连接。自然,两台不同的机器不能共享同一个正在运行的应用程序,因此它们不能与数据库共享连接。

connection.close() 应该放在哪里?

您应该始终确保在使用 Connection 实例后调用 close()(通常在 finally 块中)。如果正在使用池,这实际上会将连接返回到后台池。参考:Closing JDBC Connections in Pool

仅在选择/加载记录时使用连接是否正确?获得返回的记录/数据后,我在 finally 语句处关闭连接。

是的,没错。您不想手动挂起 Connection 引用 - 使用它来执行 SQL/DML,然后通过在 finally 块中调用 close() 将其检回到池中,就像您正在做的那样。

【讨论】:

全部正确,如果您使用的是 Java 7,则可以使用新的 AutoCloseable interface 而不是将 close() 放在 finally 块中。查看this example from the Oracle docs

以上是关于Java 连接池的主要内容,如果未能解决你的问题,请参考以下文章

java sql数据连接池的问题?

Java 连接池

JAVA连接池技术

java数据库连接池最大连接数最小连接数怎么设置

java数据库连接池最大连接数最小连接数怎么设置

java中建立数据库连接池,有哪几个步骤