1. 程式人生 > >springmvc mybatis 事務管理不生效原因

springmvc mybatis 事務管理不生效原因

spring-mvc事務配置如下

<tx:advice id="transactionAdvice" transaction-manager="transactionManager">

<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="append*" propagation="REQUIRED" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="modify*" propagation="REQUIRED" />
<tx:method name="edit*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="remove*" propagation="REQUIRED" />
<tx:method name="repair" propagation="REQUIRED" />
<tx:method name="withdrawals" propagation="REQUIRED" />
<tx:method name="pay" propagation="REQUIRED" />
<tx:method name="get*" propagation="SUPPORTS" />
<tx:method name="find*" propagation="SUPPORTS" />
<tx:method name="select*" propagation="SUPPORTS" />
<tx:method name="*" rollback-for="Exception" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="transactionPointcut"
expression="execution(* com.*.service.impl.*.*(..))" />
<aop:advisor pointcut-ref="transactionPointcut"
advice-ref="transactionAdvice" />

</aop:config> 

但在service允許程式碼報錯後,事務回滾不生效

根據 百度上的一些情況也總結了幾種

第一種在針對事務的類中丟擲RuntimeException異常,而不是丟擲Exception。

第二種: 不能在方法中使用try catch丟擲異常,不然不會回滾

第三種:

  1. mysql預設儲存引擎為MyISAM是不支援事務的,  
  2. 需要設定為InnoDB模式,通過show engines; 命令看到  

第4種:上面3種適用後都沒有效果百度到第4種方式

  1.  1.root-context.xml   
  2. <!-- 不掃描帶有@Controller註解的類。因為這些類已經隨容器啟動時,在servlet-context中掃描過一遍了 -->   
  3. <context:component-scan base-package="com.kimho">   
  4. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>   
  5. </context:component-scan>   
  6. 2、servlet-context.xml:   
  7. <!-- 掃描業務元件,讓spring不掃描帶有@Service註解的類(留在root-context.xml中掃描@Service註解的類),防止事務失效 -->   
  8. <context:component-scan base-package="com.kimho">   
  9. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>   
  10. </context:component-scan>   
將在spring-mvc.xml下的

<context:component-scan base-package="com.aa.*" >
</context:component-scan>

改成

<context:component-scan base-package="com.aa.*" >
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Service" />
</context:component-scan>

進行掃描 既可