跟大家讨论一个spring hibernate事务管理的问题
这个是一个目前没有解决的问题:spring在管理hibernate事务(jdbc应该也有,其他orm也一样)的时候,有致命的bug,连续操作多次数据更新的操作(save和update,delete),会出现数据源死锁的问题。比如我的情况:
我为一个角色分配权限,也就是在“角色-权限对应表”中插入或者删除数据。我不停的操作几下或者十几下后,系统就不动了,这时候读写都卡住了,只要是访问数据库都会卡在那里,不再继续执行了。我的操作也不会涉及并发问题,因为就我一个人操作就出现了问题。数据库本身通过客户端是可以访问的,没有问题。就是事务管理出现了问题。我是通过声明式事务管理的,spring3.0。网上我搜索了一篇文章,分析出这时一个spring的巨大bug,而且一直没有解决。
不知道spring高版本的是否还有这个问题。或者有什么其他的解决办法。 --------------------编程问答-------------------- 话说我没遇到过。这个问题是否可以debug下,能确认问题是出在spring还是hibernate。可以给他们发邮件反馈 --------------------编程问答--------------------
hibernate是没有问题的,项目目前改成直接使用Hibernate的形式了,spring不再管理事务,这样就没有问题。就是spring的一个bug。 --------------------编程问答-------------------- 能否把spring事务的相关代码贴一下,平时没遇到这个问题 --------------------编程问答-------------------- 也没什么代码了,就是标准的声明式事务管理。问题时一定有的,并不是我这个是什么特例。如果有解决过的能赐教一下,或者用过高版本的看看这个问题是否依然存在,我正在配置spring4的环境,希望没有这个问题了
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<aop:config>
<aop:pointcut id="serviceOperation"
expression="execution(* com.xxx.service.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="*" read-only="true" />
<tx:method name="save*" read-only="false" propagation="REQUIRED"/>
<tx:method name="update*" read-only="false" propagation="REQUIRED"/>
<tx:method name="remove*" read-only="false" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice> --------------------编程问答-------------------- 难道真的没人注意到这个bug吗? --------------------编程问答-------------------- 看看是不是连接数用完了 --------------------编程问答-------------------- 应该是连接数用完了 --------------------编程问答-------------------- 肯定不是这个问题,spring的一个bug,网上我看了一些博客,并自己做了实验,可以确定是spring的一个问题。 --------------------编程问答-------------------- 没注意到这个问题,有时间可以试一下
补充:Java , Web 开发