使用基于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>
答案 0 :(得分:1)
这取决于您使用的基础事务管理器。默认弹簧“每个线程的事务,没有XA事务”可能没有任何惩罚。如果您将JBoss与XA事务管理器一起使用,那么它会将一些数据写入事务日志。
- 原创 - 即便如此,我认为你会发现性能损失相当小。
- 已编辑 - 根据我的经验,在使用JBoss事务管理器转换为Readonly时,我没有看到性能的大幅提升。根据下面的评论,至少有一位用户看到了30%的性能提升,这是非常重要的。
答案 1 :(得分:1)
从理论上讲,将AOP(以及因此内省/反射)开销添加到超出必要的方法的性能是一种表现。此外,打开和关闭更多交易的额外开销超出了需要。应该由编写数据访问层的开发人员知道何时以及是否应该启动事务IMHO。