当用spring的事物来管理 hibernate的session时,如果在事物中进行了 delete,save,update等操作,则连接不会释放,需要等到事物完成后才会进行关闭,所以当事物中有大量连接时 可想而知 ,这是个灾难。
按照我的想法,只对特定标识的 方法进行事物控制,这需要一个命名规则的问题。其他的方法不需要进行控制,没必要,要不然事物粒度太小了。
我遇到了两个问题: updateA( 调用1000次 updateB) ; updateB( updateC,updateD,...)
我将update开头的方法都进行了事物拦截, updateB是private的。
每次我调用updateA时 ,就会产生几千个数据库连接 ,于是连接池爆满,然后挂掉。
这里是能理解的 ,updateB中产生了 数据操作, 于是连接不会关闭,等待事物关闭后才能释放。
我去掉数据库连接池,采用直连的方式,连接数据库,则连接就不会超过10个,当数据库连接调用完后,连接释放了。
我一直搞不明白这是怎么回事,貌似在 直连和连接池下,事物的实现方式是不一样的 。唉去研究他们的源码。郁闷