关于容器崩溃,链接池释放的问题!


c3p0连接池
<bean id="dataSource"
class=
"com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method=
"close" >
...
</bean>

proxool连接池
<bean id=
"dataSource"
class=
"org.logicalcobwebs.proxool.ProxoolDataSource">
...
</bean>

以上是spring 配置连接池时的xml代码,这里我关注的是 destroy-method的配置,我的理解是dataSource销毁时(如容器重启,或者正常关闭),spring会释放所有的连接,这里来个假设,如果容器突然崩溃了,或者是通过杀进程的方式把容器运行得进程强行杀掉了,destroy-method="close"肯定得不到执行,那么是不是说连接依然没有释放呢?请大家帮忙解惑,谢谢!

顺便说一下,org.logicalcobwebs.proxool.ProxoolDataSource.java类根本没有close方法,也没有destroy方法,但是发现网上有很多人都这么配置


<bean id="dataSource"
class=
"org.logicalcobwebs.proxool.ProxoolDataSource" destroy-method="close">
...
</bean>
或者
<bean id=
"dataSource"
class=
"org.logicalcobwebs.proxool.ProxoolDataSource" destroy-method="destroy">
...
</bean>

不知道容器重启得时候,这些人看到spring 抛出来得错误没有.

欢迎大家发表看法!

2010年04月13日 10:33 "ybzshizds"的内容
如果容器突然崩溃了,或者是通过杀进程的方式把容器运行得进程强行杀掉了,destroy-method="close"肯定得不到执行,那么是不是说连接依然没有释放呢 ...

如果是这样,大概JVM也退出了,JVM管理的线程全部释放。

谢谢banq大哥的回答,我也做了一个测试,确实是容器崩溃,连接释放!

如果是容器都退出了,那虚拟机全部内存将释放,可以看一下《深入Java虚拟机第二版》这本书