Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate池不会在数据库重新启动时刷新,也不会在连接泄漏时刷新_Java_Postgresql_Hibernate_C3p0 - Fatal编程技术网

Java Hibernate池不会在数据库重新启动时刷新,也不会在连接泄漏时刷新

Java Hibernate池不会在数据库重新启动时刷新,也不会在连接泄漏时刷新,java,postgresql,hibernate,c3p0,Java,Postgresql,Hibernate,C3p0,我正在使用hibernate和c3p0连接池,使用PostgreSQL数据库,并在连接池中配置了最大100个连接 场景:Suposse多线程使用dbessionactory从hibernate c3p0轮询获取连接,并且每个线程都不会关闭连接 所以每个螺纹都有连接泄漏。 所以在一段时间内,所有池都将不可用。正如从jmx(jconsole)中看到的,所有池都处于忙碌状态 问题:现在我的问题是,即使我重新启动postgresql,但繁忙连接显示的是jconsole中的hibernate池是100。c

我正在使用hibernate和c3p0连接池,使用PostgreSQL数据库,并在连接池中配置了最大100个连接

场景:Suposse多线程使用dbessionactory从hibernate c3p0轮询获取连接,并且每个线程都不会关闭连接

所以每个螺纹都有连接泄漏。 所以在一段时间内,所有池都将不可用。正如从jmx(jconsole)中看到的,所有池都处于忙碌状态

问题:现在我的问题是,即使我重新启动postgresql,但繁忙连接显示的是jconsole中的hibernate池是100。c3p0/hibernate不理解数据库已经重新启动,它应该释放这个


我应该如何做到这一点

c3p0无法知道,就其而言有效且已签出的连接由于DB重置而不再良好。签出的连接属于客户端,c3p0通常不会干扰它们。最好的办法是修复连接泄漏,这样就不会发生这种情况


如果你不能修复漏洞(只要修复漏洞!),c3p0确实提供了一个丑陋的解决方法,它的设置。您可以设置比有效客户端使用的超时时间更长的超时时间,当超过此超时时间时,c3p0最终将清除泄漏的连接。

是的,我知道我们需要修复泄漏,并且一定要这样做。但我要问的是,万一出现了会话泄漏,那么在修复泄漏之前,在一段时间内不进行代码更改,直到现场环境不起作用。谢谢你的回答。我找到了一个解决办法,但不建议在finalize中释放你的会话,这样当gc发生时,所有会话都将返回到池中。
finalize()
通常是一个非常不可靠的后盾。我对它不抱多大希望,尽管它可能比什么都没有好。一定要考虑设置
未返回的连接超时
。除其他外,它可以帮助你。