spring transaction失效的幾種情況

1.首先檢查配置,在項目的spring配置文件檢查是否配置開啓事務:

 

  1. <bean id="transactionManager"  
  2.     class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  3.     <property name="dataSource" ref="routeDataSource" />  
  4. </bean>  
  5.   
  6. <!-- 事務 -->  
  7. <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />  

2.同一個類中, 一個未標註@Transactional的方法去調用標有@Transactional的方法, 事務會失效

If you use (default) Spring Proxy AOP, then all AOP functionality provided by Spring (like @Transational) will only be taken into account if the call goes through the proxy. -- This is normally the case if the annotated method is invoked from another bean.

3:在非public方法上標註@Transactional, 事務無效

 

When using proxies, you should apply the @Transactional annotation only to methods with public visibility. If you do annotate protected, private 

or package-visible methods with the @Transactional annotation, no error is raised, but the annotated method does not exhibit the configured

 transactional settings. Consider the use of AspectJ (see below) if you need to annotate non-public methods.

 

   <!-- 事務設置 -->
   <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
       <property name="entityManagerFactory" ref="entityManagerFactory"/>
   </bean>
<!-- 事務使用AspectJ進行編譯時Weave -->
<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager"/>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章