2015-09-28 75 views
1

看起来JDBC Spec没有详细说明数据源连接池中alive or idle connections的准确含义。它只是具体实现吗? DBCP2HikariCP如何实际检查连接状态?JDBC上的活动或空闲连接

没有活动事务的连接会在下面标记为空闲吗?

// assuming auto commit disabled already 

Connection connection = dataSource.getConnection(); // idle? 
/* issue some JDBC SQL statements */ // active? 
connection.commit(); /* or rollback */ //idle again? 
+2

JDBC不会谈论空闲,因为空闲与JDBC无关。然而,通常(但并非总是),空闲用于引用池中的连接(这意味着它们未被检出)。 –

回答

1

“空闲”表示连接目前没有借出。 (正如Mark Rotteveel在评论中所说的那样,这与JDBC规范无关,因为JDBC并未专门处理连接池。)“活动”表示连接有效且可以使用。很容易判断某些东西是否空闲,因为池明确地跟踪了这一点,并且很难知道它是否有效,因为它是网络连接并且可能随时失败。

连接池通过在连接上运行一些测试sql来检查连接的状态,其中sql通常通过配置属性提供,像“select one from dual”这样的小事。

+0

你能举一个空闲连接的简短例子吗? – sof

+0

@sof:“空闲”表示连接已创建并且正在坐在池中,但当前没有任何内容正在使用它。我不知道你想要什么样的例子。 –

+1

@sof启动应用程序,但不允许客户端连接 - 池中的所有连接都将处于空闲状态。 –

1

你应该不同空闲 /之间借用池连接(如由Nathan讨论)有效/无效连接。

这些属性是正交的,但通常有一个属性,例如testOnBorrow for Tomcat Connection Pool当设置时可以强制借用的连接是有效的(即能够执行验证查询)。

此外,还可以设置时间限制以从连接池中移除长时间处于空闲状态的连接(例如,minEvictableIdleTimeMillis)。对于删除已放弃的连接也是类似的,即那些被“忘记”将被应用程序返回到池中的连接。 (removeAbandonedTimeout)。

你是对的全是执行特定