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

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

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

以上是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>
<p>

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

2
ybzshizds
2010-04-15 15:44
欢迎大家发表看法!

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

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

ybzshizds
2010-04-16 14:54
谢谢banq大哥的回答,我也做了一个测试,确实是容器崩溃,连接释放!

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

猜你喜欢