c3p0中有时无法使用连接

时间:2016-08-08 04:47:16

标签: java mysql hibernate c3p0

我正在开发一个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>

1 个答案:

答案 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不会阻止尝试关闭() 连接。

你必须非常小心。正如凯恩斯所说的那样,杯子和嘴唇上都有许多滑动。