当前位置:  开发笔记 > 编程语言 > 正文

在使用C3P0时,如何最好地关闭连接并避免非活动会话?

如何解决《在使用C3P0时,如何最好地关闭连接并避免非活动会话?》经验,为你挑选了1个好方法。



1> Steve Waldma..:

给定maxPoolSize20个和8个部署,您应该最多可以看到180个连接,如果应用程序已经看到流量已经消退,则可能处于非活动状态.您没有配置任何内容来鼓励快速缩减池 - 设置maxIdleTime和/或maxIdleTimeExcessConnections和/或maxConnectionAge.

您应该告诉Spring如何关闭您定义的DataSource.在您的方法上使用@Bean(destroyMethodName="close")而不是@Bean单独使用dataSource().

您尚未配置任何类型的连接测试,因此即使损坏的连接可能仍保留在池中.请参阅连接测试的简单建议.

如果问题是连接泄漏,客户端最终将无限期挂起,因为池将不在Connections中检出,但已经到达maxPoolSize,因此无法从DBMS获取更多内容.你是否看到客户这样挂?

在Java7之后,避免连接泄漏的方法是始终通过try-with-resources从DataSource获取Connections .也就是说,用...

try ( Connection conn = myDataSource.getConnection() ) {
  ...
}

而不是仅仅调用getConnection()可能抛出异常或try块的方法.如果您使用的是旧版本的Java,则需要使用健壮的资源清理惯用法,即在try块中获取Connection 并确保conn.close()finally块中始终关闭,而不管finally块中的任何其他失败.如果您不DataSource直接使用,但让Spring实用程序使用它,希望这些实用程序正在做正确的事情.但是你应该发布你收到的任何警告警告你潜在的连接泄漏!

如果您的应用程序在"预热"后很少使用Connections,并且您希望最小化资源占用,请设置minPoolSize为非常低的数字,并使用上述maxIdleTime和/或maxIdleTimeExcessConnections和/或maxConnectionAge来确保池当连接不再需要时,立即缩小规模.或者close(),当您完成其工作时,您可能是DataSource,但您可能将其留给Spring.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有