【问题标题】:JTDS driver - Connection pooling vs Connection poolJTDS 驱动程序 - 连接池与连接池
【发布时间】:2015-01-15 18:23:29
【问题描述】:

我已经离开 Java EE 有一段时间了,但我对所有这些东西都有一个基本的概念。

我在这里阅读 JTDS 文档:

http://jtds.sourceforge.net/features.html

它说它提供了语句池和连接池,但没有提供连接池实现。

  1. 假设JTDS驱动本身提供连接池, 那为什么我需要一个连接池(比如 DBCP)呢?
  2. 换句话说,那个连接有什么区别 JTDS 提供的池化和成熟的连接池 顶部的实现(在此 JTDS 文档页面的意义上) 呢?
  3. 还有,语句和连接池有什么区别 (如此 JTDS 文档页面中所述)?

随时为您的答案添加更多详细信息
(无论您认为重要的事情;我没有明确询问的事情)
因为我对此感到很困惑。

【问题讨论】:

  • 看起来“语句池”是一个错字,应该是“语句缓存”,这是一个非常需要的功能:当应用程序触发相同的查询时,驱动程序将重新使用准备好的语句进行连接(例如,重复查询,如“select * from users where userid=?”)。这可以节省大量(IO/网络)时间,并且像HikariCP 这样的连接池实现假定 JDBC 驱动程序具有此功能(HikariCP 选择不实现语句缓存功能)。

标签: java jakarta-ee jdbc jtds apache-commons-dbcp


【解决方案1】:

据我从 API 文档中得知,它们的意思是 jTDS 提供了 javax.sql.PooledConnectionjavax.sql.ConnectionPoolDataSource 实现。这些类将由连接池(例如,Java EE 应用程序服务器)使用,而不是连接池本身。

ConnectionPoolDataSource 创建PooledConnection 对象,或者换句话说,它是用于连接池的数据源。 PooledConnection 是物理连接的句柄,保存在连接池中。当用户向池中请求连接时,连接池将PooledConnection从“可用”列表移至“使用中”列表,并从PooledConnection中获取逻辑java.sql.Connection。这个逻辑连接就是交给用户的。

PooledConnection 可以被连接池用来监控逻辑连接。例如在调用close() 时将PooledConnection 恢复为'available',或者强制撤销并使逻辑连接无效(例如,如果它使用时间过长)。

所以 jTDS 本身没有连接池实现,但它支持连接池。很遗憾,JDBC 规范中的措辞如此混乱。

我在a similar question 上有关于这个主题的更详细的答案。

【讨论】:

    猜你喜欢
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 2021-06-05
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多