我已经按照如下方式设置了c3PO设置
hibernate.c3p0.min_size = "20";
hibernate.c3p0.max_size = "30";
hibernate.c3p0.maxConnectionAge = "10";
hibernate.c3p0.timeout = "15";
然后我的代码如下
@Transactional
void m1(){
for(int i = 0; i<10; i++){
fetch(); // fetches db entry
Thread.sleep(20000);
update(); // updates db entries
}
}
这里,我使线程休眠20秒(> maxConnectionAge和超时)。然后,代码成功执行<< [没有关闭任何数据库连接。为什么会这样?
[有人可以帮助我理解db连接关闭?
close()
变为Connection
。此规则有一个主要例外,即c3p0不会与检出的Connection
混淆-c3p0设置unreturnedConnectionTimeout。即使用intended specifically解决和/或调试具有Connection
泄漏的客户端应用程序。也许这就是您要寻找的设置。
通常,c3p0根据您的设置管理物理Connections
的生命周期。 maxConnectionAge
,maxIdleTime
,maxIdleTimeExcessConnections
,连接测试设置和测试结果都可能导致物理连接被close()
当它们在池中而不是在客户端中时
。客户端负责close()
检出他们的连接(实际上,这并不会破坏物理Connection
,而是将其返回到池中)。