我们为什么需要连接池?
2005-06-09 13:24
387 查看
当使用
Java 应用程序调用
JDBC 厂商代码(驱动程序或者
JVM 需要检查底层调用的安全方面。例如,applet 只被允许和产生它们的服务器进行通讯。
如果允许,调用需要穿过主机网络接口到公司 LAN 上。
调用可能需要穿过防火墙到达因特网或广域网。
调用最终到达目的子网络,在那里它可能需要穿过另一个防火墙。
调用到达数据库主机。
数据库服务器处理新的连接请求。
许可证服务器可能需要查询来确定是否有适当的许可。
数据库初始化新的客户机连接,包括所有内存和操作系统开销。
返回调用被送回 JDBC 客户机(在那里它必须穿过所有防火墙和路由器)。
JVM 收到返回调用,然后创建适当的
请求的 Java 应用程序收到
很明显,请求一个新的
DriverManager或
DataSource方法来获取数据库连接时,每个对新数据库连接的请求都会导致很大的开销。如果频繁地获取新的连接,将会影响性能,这在 Web 服务器环境中可能会出现。为了强调为什么会发生这种情况,让我们来看看一个典型的数据库连接请求的底层途径。
Java 应用程序调用
getConnection()。
JDBC 厂商代码(驱动程序或者
DataSource实现)请求一个来自 JVM 的套接字连接。
JVM 需要检查底层调用的安全方面。例如,applet 只被允许和产生它们的服务器进行通讯。
如果允许,调用需要穿过主机网络接口到公司 LAN 上。
调用可能需要穿过防火墙到达因特网或广域网。
调用最终到达目的子网络,在那里它可能需要穿过另一个防火墙。
调用到达数据库主机。
数据库服务器处理新的连接请求。
许可证服务器可能需要查询来确定是否有适当的许可。
数据库初始化新的客户机连接,包括所有内存和操作系统开销。
返回调用被送回 JDBC 客户机(在那里它必须穿过所有防火墙和路由器)。
JVM 收到返回调用,然后创建适当的
Connection对象。
请求的 Java 应用程序收到
Connection对象。
很明显,请求一个新的
Connection对象会带来大量的开销和很多潜在的错误。为了最小化开销,为什么在我们使用完数据库连接后不是重新使用它们,而是删除它们呢?JDBC 设计者在创建
ConnectionPoolDataSource时使用这种流行的设计模式,这允许您创建数据库连接池,其中的连接在关闭后可以重用,而不是被删除。
相关文章推荐
- 什么是连接池?我们为什么需要它?
- 为什么我们需要单元测试?
- 为什么我们需要域?Active Directory系列之一
- 为什么我们需要uCos
- 我们为什么需要awk?
- 我们为什么需要SDN?
- 我们为什么需要override关键字
- 为什么我们需要这么多的寻址方式
- 我们为什么需要AOP
- 我们为什么需要电动车?
- 为什么我们需要TOGAF企业架构?——上海信息化培训中心
- 从程序员的角度来看为什么我们需要工作流
- 我们为什么需要DTO(数据传输对象)
- 为什么我们需要STM(Software Transactional Memory)
- hibernate 3.* C3P0配置 以及为什么需要连接池!
- 我们为什么需要DTO?
- 为什么我们需要域?Active Directory系列之一
- BuildYourOwnLisp Why we need pointer 为什么我们需要指针
- Linux touch 命令 - 为什么我们需要改变时间戳?
- 我们为什么需要校友录 快捷的校友信息云图