我正在开发一个web项目,我在web服务中使用了c3p0。我已经在hibernate.cfg.xml文件中配置了以下参数。但即使我已经给出max_size是10000而空闲测试周期是30,有时mysql服务器没有提供另一个连接到db.So网站正在加载并加载,直到我重新启动我的服务器。我的日志显示"太多连接被打开"。我在以下配置中错过了什么。请帮帮我
<property name="hibernate.c3p0.min_size">10</property>
<property name="hibernate.c3p0.max_size">10000</property>
<property name="hibernate.c3p0.max_statements">5000</property>
<property name="hibernate.c3p0.maxIdleTime">1000</property>
<property name="hibernate.c3p0.maxIdleTimeExcessConnections">500</property>
<property name="hibernate.c3p0.acquire_increment">100</property>
<property name="hibernate.c3p0.idle_test_period">30</property>
<property name="hibernate.c3p0.validate">true</property>
<property name="hibernate.c3p0.preferredTestQuery">SELECT 1</property>
<property name="hibernate.c3p0.testConnectionOnCheckin">true</property>
<property name="hibernate.c3p0.testConnectionOnCheckout">false</property>
答案 0 :(得分:0)
你很可能有连接泄漏。巨大的游泳池大小对此无济于事。请参阅here。
最好能够使用try with resources。但是,如果您使用的是旧版本的Java(Java 7之前版本),或者使用未实现AutoCloseable
的资源,您可能仍需要恢复此类操作。
Connection c = null;
OtherResource or = null;
try
{
c = cpds.getConnection();
or = getOtherResource()
// do stuff
// ...
}
finally
{
try { if (or != null) or.close(); }
catch (Exception e) { e.printStackTrace(); }
try { if (c != null) c.close(); }
catch (Exception e) { e.printStackTrace(); }
}
请注意,如果获取了Connection,则肯定会执行finally子句,并且每个资源都有最佳尝试close():or
无法关闭(),Exception不会阻止尝试关闭()
连接。
你必须非常小心。正如凯恩斯所说的那样,杯子和嘴唇上都有许多滑动。