1. 程式人生 > >Spring事務不起作用問題彙總

Spring事務不起作用問題彙總

1、首先使用如下程式碼 確認bean 是代理物件嗎?

必須是Spring定義(通過XML或註解定義都可以)的Bean才接受事務。

直接new出來的物件新增事務是不起作用的。

可以通過以下方式判斷是否是代理物件:

AopUtils.isAopProxy(Object object)

AopUtils.isCglibProxy(Object object) //cglib

AopUtils.isJdkDynamicProxy(Object object) //jdk動態代理

 2、入口函式必須是public,否則事務不起作用。這一點由Spring的AOP特性決定的。

 3、切入點配置錯誤。

<!-- 使用annotation註解方式配置事務 -->
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>

<!--使用切面方式配置事務-->
<tx:advice id="txadvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" isolation="READ_COMMITTED" propagation="REQUIRED" rollback-for="java.lang.Exception" /> 
</tx:attributes>
</tx:advice>

<aop:config>
<aop:pointcut id="pointcut" expression="execution(* com.tyyd..*Service.do*(..))"/>
<aop:advisor advice-ref="txadvice" pointcut-ref="pointcut"/>
</aop:config>

4、如果你使用了springmvc,可能是context:component-scan重複掃描引起的:

5、如使用mysql且引擎是MyISAM造成的(因為不支援事務),改成InnoDB即可。

spring  [sprɪŋ]  詳細X 基本翻譯 n. 春天;彈簧;泉水;活力;跳躍 n. (Spring)人名;(德)施普林;(英、芬、瑞典)斯普林 adj. 春天的 vt. 使跳起;使爆炸;突然提出;使彈開 vi. 生長;湧出;躍出;裂開