解惑

解己之惑,解人之惑

使用Spring的声明式事务管理带来的性能问题

做了一个简单的项目,使用到了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>

这样修改后问题得到解决。
需要说一下的是,如果这个里面不配置事务,速度也非常的慢。

(Visited 244 times, 1 visits today)

1 Comment

  1. 呵呵 学习

发表评论

电子邮件地址不会被公开。 必填项已用*标注

© 2020 解惑

本主题由Anders Noren提供向上 ↑