C3P0连接提供程序是否创建新连接或重用连接?

时间:2015-04-24 05:49:40

标签: java database c3p0

我在MySQL中面临与GET_LOCK相关的一些用法。我正在使用c3p0连接提供程序。 getConnection()中的c3P0方法每次都会创建新连接还是重用连接?

2 个答案:

答案 0 :(得分:1)

DataSource上的getConnection从连接池获取连接。如果没有任何可用且未达到maxPoolSize,则会打开新连接。如果达到maxPoolSize,则等待某些连接返回池。 (它必须由正在使用它的线程释放)

线程释放连接后,它将返回到池中,并可能被其他一些线程重用。

文档为http://www.mchange.com/projects/c3p0/

答案 1 :(得分:0)

c3p0维护一个Connections池,可以为多个客户端重用。

但是,您不能假设您使用的Connection将是您将再次看到的Connection。您可能会收到来自c3p0池的任何连接,无法保证或您可能会看到您已经看过的。并且,根据您的配置,c3p0测试,到期,并替换幕后的连接。

如果您尝试在一个客户端会话中将锁与Connection关联,然后在另一个客户端会话中将其释放,那么这将无法正常工作并且会快速破解。实际上,通过任何显式锁定,您的获取和发布应该在一个客户端会话中完成,使用try / finally语义来确保锁定释放。