做了一个简单的项目,使用到了spring和hibernate,但是有一个很奇怪的现象,就是运行很慢,从最简单的登陆开始就很慢,跟踪了一下,竟然花
了20多秒,然后把里面的一个update操作注释掉后就快了很多,一般不到一秒了,但是下一个操作也很慢了。最开始是怀疑更新数据库导致的缓存的性能问
题,但是后来去掉缓存问题依旧,然后继续跟踪,发现有个get操作也很慢,而get方法体内的操作实际也是很快的,也是不到一秒,怀疑是spring封装
的HibernateTemplate的问题,但是仔细一想不太可能,这个应该是有很多人用过了,而且以spring的技术能力应该不会有这种问题。突然
想到我的这些DAO方法都是配置了声明式事务的,而事务对性能的影响实际上是很大的,原来的配置如下:
<property name=”transactionAttributes”>
<props>
<prop
key=”insert*”>PROPAGATION_REQUIRED</prop>
<prop
key=”update*”>PROPAGATION_REQUIRED</prop>
<prop
key=”delete*”>PROPAGATION_REQUIRED</prop>
<prop
key=”get*”>PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
回忆了一下,我的DAO里面有很多不符合这个方法命名的方法,例如登陆方法本身就是login,还有一些addXxx方法以及isXxx,修改了add方法统一为insert方法,然后修改了声明的内容为:
<property name=”transactionAttributes”>
<props>
<prop
key=”insert*”>PROPAGATION_REQUIRED</prop>
<prop
key=”update*”>PROPAGATION_REQUIRED</prop>
<prop
key=”delete*”>PROPAGATION_REQUIRED</prop>
<prop
key=”*”>PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
这样修改后问题得到解决。
需要说一下的是,如果这个里面不配置事务,速度也非常的慢。
2008年10月28日 at 21:32
呵呵 学习