0

使用基于 Spring AOP 的声明性事务管理将所有方法定义为事务性是否有任何性能损失?请参阅下面的配置。原因是我不知道开发人员会给非事务性方法取什么方法名。一种选择是我从通配符列表开始,如果方法名称不属于定义的列表,开发人员会更新列表。

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*" />
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:pointcut id="dtxops" expression="bean(*Service)" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="dtxops" />
</aop:config>
4

2 回答 2

1

这取决于您使用的底层事务管理器。默认的spring“每线程事务,没有XA事务”可能没有任何惩罚。如果您将 JBoss 与 XA 事务管理器一起使用,那么它会将一些数据写入事务日志。

-- 原创 -- 即使那样,我认为您会发现性能损失相当小。

-- 已编辑 -- 以我的经验,当使用 JBoss 事务管理器转换为只读时,我没有看到性能有显着提高。根据下面的评论,至少有一位用户看到了 30% 的性能提升,这是非常显着的。

于 2011-10-10T15:28:15.103 回答
1

从理论上讲,将 AOP(以及因此的自省/反射)开销添加到不必要的方法会导致性能损失。此外,打开和关闭比需要更多的事务也会增加开销。恕我直言,应该由编码数据访问层的开发人员知道何时以及是否应该启动事务。

于 2011-10-10T15:29:45.047 回答